[atARC111F]Do you like query problems
(以下修改指1和2类操作,询问指3类操作,操作指修改或询问)
注意到总方案数确定,那么不妨求出答案的期望,再乘上方案数即为答案
(这里从期望的角度考虑只是为了描述方便,并没有太大的实际意义)
设$E(t)$为对某一个位置执行$t$次修改(指对该点)后该位置的期望,通过概率去求,即设$P(t,i)$表示经过$t$次修改后为$i$的概率,那么$E(t)=\sum_{i=0}^{m-1}i\cdot P(t,i)$
初始有$P(0,0)=1$,接下来有$P(t,i)=\frac{\sum_{j=0}^{m-1}P(t,i)+mP(t-1,i)}{2m}=\frac{1}{2m}+\frac{P(t-1,i)}{2}=\frac{1}{m}-\frac{1}{m2^{t}}$($P(t,0)$系数为0,可以不考虑),代入$E(t)$,即可得$E(t)=\sum_{i=1}^{m-1}\frac{i}{m}-\frac{i}{m2^{t}}=(1-\frac{1}{2^{t}})\frac{m-1}{2}$
记$p_{i}=\frac{i(n-i+1)}{n+1\choose 2}$,即第$i$个位置被操作区间包含的概率,那么当经过$t$次修改(指全局)后,即可得第$i$个位置的期望为$h_{t,i}=\frac{m-1}{2}\sum_{j=0}^{t}{t\choose j}p_{i}^{j}(1-p_{i})^{t-j}(1-\frac{1}{2^{j}})=\frac{m-1}{2}(1-(1-\frac{p_{i}}{2})^{t})$(二项式定理合并)
(为了方便,以下记$P=1-\frac{p_{i}}{2}$,即$h_{t,i}=\frac{m-1}{2}(1-P^{t})$)
再加入查询,即经过$t$次操作后第$i$个位置的期望$g_{t,i}=\frac{\sum_{j=0}^{t}{t\choose j}(2m)^{j}h_{j,i}}{(2m+1)^{t}}$(枚举修改次数),将$h_{t,i}$代入后并化简,即可得$g_{t,i}=\frac{m-1}{2}(1-(\frac{2mP+1}{2m+1})^{t})$
考虑第$i$个位置对答案的贡献的期望,即$f_{i}=\frac{p_{i}}{2m+1}\sum_{j=1}^{q}g_{j-1,i}$(枚举产生贡献的操作编号,需要是询问且包含$i$),同样即可得$f_{i}=\frac{p_{i}(m-1)}{2(2m+1)}(q-S(\frac{2mP+1}{2m+1}))$(其中$S(k)=\sum_{i=0}^{q-1}k^{i}=\frac{k^{q}-1}{k-1}$)
最终答案即为$\sum_{i=1}^{n}f_{i}$,时间复杂度由于快速幂,需要$o(n\log_{2}n)$

1 #include<bits/stdc++.h>
2 using namespace std;
3 #define mod 998244353
4 int n,m,q,ans;
5 int ksm(int n,int m){
6 int s=n,ans=1;
7 while (m){
8 if (m&1)ans=1LL*ans*s%mod;
9 s=1LL*s*s%mod;
10 m>>=1;
11 }
12 return ans;
13 }
14 int inv(int k){
15 return ksm(k,mod-2);
16 }
17 int S(int k){
18 if (k==1)return q;
19 return 1LL*(ksm(k,q)+mod-1)*inv(k-1)%mod;
20 }
21 int main(){
22 scanf("%d%d%d",&n,&m,&q);
23 int s=inv(2*m+1);
24 for(int i=1;i<=n;i++){
25 int p=1LL*i*(n-i+1)%mod*inv(n)%mod*inv(n+1)%mod;
26 int P=mod+1-p,ss=S((2LL*m*P+1)%mod*s%mod);
27 ans=(ans+1LL*p*(m-1)%mod*s%mod*(q+mod-ss))%mod;
28 }
29 s=1LL*n*(n+1)/2%mod*(m+m+1)%mod;
30 ans=1LL*ans*ksm(s,q)%mod;
31 printf("%d",ans);
32 }
[atARC111F]Do you like query problems的更多相关文章
- hdu 5057 Argestes and Sequence(分块算法)
Argestes and Sequence Time Limit: 5000/2500 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Ot ...
- hdu5057 Argestes and Sequence 分块
Time Limit: / MS (Java/Others) Memory Limit: / K (Java/Others) Total Submission(s): Accepted Submiss ...
- Codeforces Round #260 (Div. 1) D. Serega and Fun 分块
D. Serega and Fun Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/455/pro ...
- Caching Best Practices--reference
reference:http://java.dzone.com/articles/caching-best-practices There is an irresistible attraction ...
- hdu 5057 Argestes and Sequence
Argestes and Sequence Time Limit: 5000/2500 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Ot ...
- BestCoder Round #11 (Div. 2) 题解
HDOJ5054 Alice and Bob Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/O ...
- HDU5057(分块)
Argestes and Sequence Time Limit: 5000/2500 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Ot ...
- CodeForces - 455D
Serega loves fun. However, everyone has fun in the unique manner. Serega has fun by solving query pr ...
- Neo4j 文档
Graph Fundamentals 基础 Basic concepts to get you going. A graph database can store any kind of data u ...
随机推荐
- java/ kotlin下的单例模式
单例模式属于创建型模式, 顾名思义,就是说整个系统中只有一个该对象的实例. 为什么要使用单例模式? 1, 对于一些需要频繁创建,销毁的对象, 使用单例模式可以节省系统资源 2, 对于全局持有的对象,单 ...
- html行内元素
定义 行内元素只占据它对应标签的边框所包含的空间,没有换行效果 div{ /* 定义行内元素*/ display:inline } 特点 多个元素可以横排显示 不支持宽高和上下margin 支持pad ...
- 微服务+异步工作流+ Serverless,Netflix 决定弃用稳定运行 7 年的旧平台
作者 | Frank San Miguel 策划 | 田晓旭 2021 年,Netflix 会将大部分的工作负载从 Reloaded 转移到 Cosmos 平台.Cosmos 是一个计算平台,它将微服 ...
- cmd下载慢
是网络的原因,加一个镜像服务器 pip install *** -i https://pypi.tuna.tsinghua.edu.cn/simple
- javascriptRemke之原型的重要性
前言:JavaScript的原型对象一直是新人学习js的一大重大阻碍,但是原型的知识往往又是面试中常常会被深挖的一个点,为什么会这样呢?本文带你揭秘JavaScript原型的重要性,了解重要性之后再进 ...
- 多项式(polynomial)
多项式(polynomial) 题目大意: 给出一个 n 次多项式 \(f(x)=\sum_{i=0}^na_ix^i\) 对于\(k ≤ x ≤ k + l − 1\) 的\(l\) 个\(x\), ...
- [转载]CSS3实现文本垂直排列
最近的一个项目中要使文字垂直排列,也就是运用了CSS的writing-mode属性. writing-mode最初时ie中支持的一个属性,后来在CSS3中增添了这一新的属性,所以在ie中和其他浏览器中 ...
- python反序列化1(__reduce__)
part1:不求甚解的复现 对于服务端源码: 编写恶意序列化对象生成程序: 将生成的恶意序列化对象输入服务端user,使其执行系统命令.(上面那俩其实都行) part2:原理解释 b'xxx'是 ...
- 80. 删除有序数组中的重复项 II
题目 给你一个有序数组 nums ,请你原地删除重复出现的元素(不需要考虑数组中超出新长度后面的元素),使每个元素最多出现两次 ,返回删除后数组的新长度. 不要使用额外的数组空间,你必须在原地修改输入 ...
- [no code][scrum meeting] Beta 7
$( "#cnblogs_post_body" ).catalog() 例会时间:5月21日15:30,主持者:彭毛小民 下次例会时间:5月22日15:30,主持者:赵涛 昨日为5 ...