[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 ...
随机推荐
- 【DP】Educational DP Contest
这份 dp 题单的最后几题好难 orz. 前面的题比较简单,所以我会选取一些题来讲,其它的直接看代码理解吧 qwq. 传送门: https://atcoder.jp/contests/dp 全部 AC ...
- 使用node-gyp编写简单的node原生模块
通过样例,让我们了解如何编写一个node的原生模块.当然,这篇文章还有一个目的,是为了方便以后编写关于node-gyp的文章,搭建初始环境. 基于node-addon-api 基于node-addon ...
- S_型文法到q_型文法再到LL(1)型文法演进笔记
title: S_型文法到q_型文法再到LL(1)型文法演进笔记 date: 2020-08-23 S_型文法到q_型文法再到LL(1)型文法演进笔记 S_型文法(简单的确定性文法) 每个产生式的右部 ...
- oracle基础安全配置
1.oracle中用户密码复杂度配置 1)查看参数 select limit from dba_profiles where resource_name='PASSWORD_VERIFY_FUNCTI ...
- Geocoding Tools(地理编码工具)
地理编码工具 # Process: 创建地址定位器 arcpy.CreateAddressLocator_geocoding("", "", "&qu ...
- 1002 写出这个数 (20 分) java解题
读入一个正整数 n,计算其各位数字之和,用汉语拼音写出和的每一位数字. 输入格式: 每个测试输入包含 1 个测试用例,即给出自然数 n 的值.这里保证 n 小于 10^100. 输出格式: 在一行内输 ...
- springboot事务的传播行为和隔离级别
springboot事务的传播行为和隔离级别 在springboot中事务的传播行为和隔离级别都是在TransactionDefinition这个接口中定义的 传播行为定义了7种,分别用0-6来表示 ...
- 升级更新 Windows10
升级更新 Windows10:获取 Windows 更新助手 升级 Windows10,它是先下载 Windows10 系统镜像,然后才升级.在下载完 Windows10 后,升级前,有一步骤会询问: ...
- python常用功能
1. 获取昨天日期 引入datetime模块 import datetime def getYesterday(): today = datetime.date.today() #返回当前本地日期 # ...
- 【Java虚拟机11】线程上下文类加载器
前言 目前学习到的类加载的知识,都是基于[双亲委托机制]的.那么JDK难道就没有提供一种打破双亲委托机制的类加载机制吗? 答案是否定的. JDK为我们提供了一种打破双亲委托模型的机制:线程上下文类加载 ...