F - Double Chance(期望,数学,树状数组优化)[AtCoder Beginner Contest 276]

news2025/7/23 12:24:51

题目如下:

在这里插入图片描述
F - Double Chance 题目链接

思路 or 题解:

期望公式: ∑ v a l × p \sum val \times p val×p
还可以细分:
如果两次抽出的值是相同的,都是 x x x,那么抽出的方案数为 c n t x × c n t x cnt_x \times cnt_x cntx×cntx
如果两次抽出的值不同,那么抽出的方案数为: c n t x × m i n x cnt_x \times min_x cntx×minx
m i n x min_x minx 指的是小于 x x x的个数

综上所述:
抽出最大值为 x x x的概率为: c n t x 2 + c n t x ∗ m i n x ∗ 2 m 2 ∗ x \frac{cnt_x^2 + cnt_x * min_x * 2}{m^2} * x m2cntx2+cntxminx2x
其中 m m m 为袋子里的元素个数

时间复杂度: O ( n 2 ∗ l o g n 2 ) O(n^2 * logn^2) O(n2logn2)

优化:

此处我们将上述公式的 m 2 m^2 m2 中的 m m m 改成输出中的 n n n,方便分数加法,最后乘上 n 2 m 2 \frac{n^2}{m^2} m2n2 即可

式子变为:
( 2 c n t x − 1 ) + 2 m i n x n 2 × x \frac{(2cnt_x - 1) + 2min_x}{n ^ 2} \times x n2(2cntx1)+2minx×x

显然 c n t cnt cnt 2 c n t x n 2 \frac{2cnt_x}{n^2} n22cntx 都可以用树状数组存,以 x x x 为下标即可。

AC代码:

#define int long long
//#define int long long
#define PII pair<int, int>
#define px first
#define py second
typedef std::mt19937 Random_mt19937;
Random_mt19937 rnd(time(0));
using namespace std;
const int MOD = 998244353;
const int N = 400009;
int n;
int ksm(int a, int b, int p)
{
    a %= p;
    int ret = 1;
    while (b)
    {
        if (b % 2)
            ret = ret * a % p;
        a = a * a % p;
        b /= 2;
    }
    return ret;
}
#define getny(x, p) (ksm(x, (p)-2, p))
#define fracny(x, y, p) (((x) % (p)) * getny(y, p) % (p))

int cnt[N];

int pfn;

#define lowbit(x) ((x) & (-(x)))
int c[N]; // cnt
void add(int x, int v)
{
    for (int i = x; i <= 2e5; i += lowbit(i))
        c[i] += v;
}
int query(int x)
{
    int ret = 0;
    for (int i = x; i; i -= lowbit(i))
        ret += c[i];
    return ret;
}
int c1[N]; //((cnt*2)/(n^2))*x
void add1(int x, int v)
{
    for (int i = x; i <= 2e5; i += lowbit(i))
        c1[i] += v;
}
int query1(int x)
{
    int ret = 0;
    for (int i = x; i; i -= lowbit(i))
        ret += c1[i];
    return ret;
}

#define gm(x) (((x) % MOD + MOD) % MOD)

int ans;

void add(int x)
{
    pfn++;

    cnt[x]++;
    add(x, 1);
    add1(x, fracny(2, n * n, MOD) * x % MOD);
    ans = (ans + fracny(2 * cnt[x] - 1 + query(x - 1) * 2, n * n, MOD) * x % MOD) % MOD;

    ans = (ans + gm(query1(2e5) - query1(x))) % MOD;
}

void solve()
{
    buff;
    cin >> n;
    for (int i = 1; i <= n; i++)
    {
        int x;
        cin >> x, add(x);
        cout << ans * fracny(n * n, pfn * pfn, MOD) % MOD << '\n';
    }
}
signed main()
{
    buff;
    solve();
}

参考文章
感谢:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/7618.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Allegro 274X格式gerber输出全流程详细介绍

Allegro 274X格式gerber输出全流程详细介绍 下面介绍Allegro gerber输出的全流程介绍 首先把光绘设置好 设置光钻孔精度 会出现对话框,勾选Enhanced Excellon format,点击close 输出钻孔文件,选择Auto Tool select,点击Drill 输出椭圆孔文件,默认设置,然后点击rout…

一套SCDM脚本建模与二次开发攻略

导读&#xff1a;ANSYS SpaceClaim Direct Modeler&#xff08;简称 SCDM&#xff09;&#xff0c;是基于直接建模思想的新一代3D建模和几何处理软件&#xff0c;摒弃了基于历史的概念建模的约束的概念&#xff0c;让我们轻松完成几何的创建与修改&#xff0c;不会带来传统CAD系…

【附源码】计算机毕业设计JAVA晨光文具店进销存系统设计与开发

【附源码】计算机毕业设计JAVA晨光文具店进销存系统设计与开发 目运行 环境项配置&#xff1a; Jdk1.8 Tomcat8.5 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xf…

m基于STBC的MIMO通信系统性能仿真和信道容量仿真

目录 1.算法概述 2.仿真效果预览 3.核心MATLAB预览 4.完整MATLAB程序 1.算法概述 空时分组编码STBC&#xff08;Space Time Block Coding&#xff09;用在无线通信中传输一个数据流的多个拷贝。通过许多天线来产生数据的多种接收版本&#xff0c;提高数据传输的可靠性。接收…

4、Redis配置文件介绍

文章目录4、Redis配置文件介绍4.1、###Units单位###4.2、###INCLUDES包含###4.3、###网络相关配置4.3.1、bind4.3.2、protected-mode4.3.3、Port4.3.4、tcp-backlog4.3.5、timeout4.3.6、tcp-keepalive4.4、###GENERAL通用###4.4.1、daemonize4.4.2、pidfile4.4.3、loglevel4.4…

一次SpringBoot版本升级,引发的血案

前言 最近项目组升级了SpringBoot版本&#xff0c;由之前的2.0.4升级到最新版本2.7.5&#xff0c;却引出了一个大Bug。 到底是怎么回事呢&#xff1f; 1.案发现场 有一天&#xff0c;项目组的同事反馈给我说&#xff0c;我之前有个接口在新的测试环境报错了&#xff0c;具体…

从应用层深入Framework层,Android Framework 该如何学习?

对于咱们Android开发来说&#xff0c;一般来说都是干上个几年之后&#xff0c;都得要考虑进阶或者是转行的问题。但老话说转行穷三年&#xff0c;不到万不得已我想大多数人都 不会去放弃现在的岗位与薪资。 如果你还在干Android并且想要进阶&#xff0c;那么对Framework的了解…

ava面试八股文-基础概念二

Java面试八股文-基础概念二1.重载与重写的区别2.接口与抽象类区别3.Java集合类-Collection6.lambda表达式与匿名内部类的区别1.重载与重写的区别 重载是编译时多态&#xff0c;重写是运⾏时多态。 方法重写&#xff1a; &#xff08;1&#xff09;参数列表与被重写方法的参数列…

低代码维格云明细视图入门教程

功能简介 低代码维格云可以将基础的数据通过设置操作权限、查询条件、限制数据范围、设置字段显示来创建数据表的明细视图。 设置步骤 功能入口 具体见报表简介 操作权限 数据表是拥有操作权限类别最多的自定义图表,操作权限包括: 可导出可见流程日志可留言可打印可添加数…

C. Balanced Bitstring(思维+子字符串规律)

Problem - 1405C - Codeforces 一个比特串是一个只由0和1字符组成的字符串&#xff0c;如果这个比特串的每个大小为k的子串都有相同数量的0和1字符&#xff08;各为k2&#xff09;&#xff0c;那么这个比特串就被称为k平衡的。 给你一个整数k和一个只由0&#xff0c;1&#xf…

来自BAT的一份Java高级开发岗面试指南:金三银四必定面试无忧

作为一名即将求职的程序员&#xff0c;你的就业机会和风口会出现在哪里&#xff1f;在这种新环境下&#xff0c;工作应该选择大厂还是小公司&#xff1f;已有几年工作经验的老兵&#xff0c;又应该如何保持和提升自身竞争力&#xff0c;转被动为主动&#xff1f; 就目前大环境…

VMware16虚拟机添加硬盘(磁盘)和挂载硬盘(磁盘)

记录&#xff1a;317 场景&#xff1a;在VMware16虚拟机&#xff0c;安装了CentOS 7.9操作系统场景下&#xff0c;添加硬盘(磁盘)和挂载硬盘(磁盘)。 版本&#xff1a; 操作系统&#xff1a;CentOS 7.9 1.机器配置 机器名称&#xff1a;B200&#xff1b;主机名称&#xff…

企业级数据中台应用架构和技术架构

一、什么是数据中台 数据中台是一种将企业沉睡的数据变成数据资产&#xff0c;持续使用数据、产生智能、为业务服务&#xff0c;从而实现数据价值变现的系统和机制。通过数据中台提供的方法和运行机制&#xff0c;形成汇聚整合、提纯加工、建模处理、算法学习&#xff0c;并以…

【路径规划-VRP问题】基于遗传算法求解出租车网约车接送客车辆路径规划问题附matlab代码

✅作者简介&#xff1a;热爱科研的Matlab仿真开发者&#xff0c;修心和技术同步精进&#xff0c;matlab项目合作可私信。 &#x1f34e;个人主页&#xff1a;Matlab科研工作室 &#x1f34a;个人信条&#xff1a;格物致知。 更多Matlab仿真内容点击&#x1f447; 智能优化算法 …

好未来(TAL)喜忧参半的前景

来源&#xff1a;猛兽财经 作者&#xff1a;猛兽财经 猛兽财经认为好未来&#xff08;TAL&#xff09;的前景喜忧参半。一方面&#xff0c;好未来已成功转向了新业务领域&#xff0c;如内容解决方案和学习技术解决方案&#xff0c;其新的直播电商业务也有巨大的增长潜力。另一…

npm nvm cnpm常见指令

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录前言一、nvm开头操作1.安装nodejs2.查看当前正在使用的版本3.切换使用的nodejs版本二、npm开头的操作1.全局安装cnpm2.查看npm的版本4.运行项目5.安装路由5.1 vue3 的…

FRNet:Feature Reconstruction Network for RGB-D Indoor Scene Parsing

1&#xff1a;铺垫 多数场景解析方法使用weak distinction和大的跨度&#xff0c;效果不是最好的。为了解决这个问题&#xff0c;作者使用了内在的多层跨模态数据和反向传播去构建一个新的特征重建网络FRNet&#xff0c;具体来说&#xff0c;encoder为了获得自上而下的逐层特征…

居民消费价格指数变化新鲜出炉,这类商品同比涨幅最大

对比分析2022年10月份全国居民消费价格数据发现&#xff0c;今年10 月份CPI 同比增2.5%&#xff0c;维持近8个月新高&#xff1b; PPI 同比增3.3%&#xff0c;同比涨幅较上个月回落 2.2 个百分点。 ​ | CPI同比增2.5%&#xff0c;维持近8个月新高 全国居民消费价格涨跌幅情…

C++之函数模板、类模板、模板的特化

1.什么是模板&#xff1f; 模板是c的一种特性&#xff0c;允许函数或者类&#xff08;对象&#xff09;通过泛型&#xff08;generic types&#xff09;的形式表现或者运行模板可以使得函数或类在对应不同的类型&#xff08;types&#xff09;的时候正常工作&#xff0c;而无需…

数组的substring方法和substr方法

数组的substring()方法、substr()方法都可以用于字符串截取 substr(start,length) 从指定下标开始截取指定长度的字符串&#xff0c;不改变字符串 start 必要&#xff0c;开始下标&#xff0c;若是负数&#xff0c;则从字符串尾部开始截取length 可选&#xff0c;若省略&…