hdu6595 Everything Is Generated In Equal Probability 数学期望
链接
Everything Is Generated In Equal Probability
题意
①给个N(1≤N≤3000),在1~N中等概率取一个数n
②随机产生一个1~n的排列,记录逆序对个数
③然后等概率随机取一个该排列的子序列
④再次记录逆序对个数
⑤再次等概率去一个子序列……
⑥无穷递归下去,求逆序对总和的数学期望E(N)
⑦结果可能为分数,对998244353取模
思路
样例信息挖掘
先用两层循环枚举分子分母,结合快速幂取分母逆元,将N=2和N=3的答案还原成分数,分别为1/3和8/9
N=1的时候,n只能取1,排列只有1,不存在数对,自然没有逆序对
假设N=x时答案为F(x)
n=x的随机排列对答案的贡献期望为f(x)
算出f(2)和f(3)也没有什么用,我们找不到规律,但是等会儿推出来公式可以用它验证公式的正确性。
公式推导
在长度为n的随机排列中,数对(x,y)有个
由于没有相等元素,正序对(x,y) x<y 个数 == 逆序对(x,y) x>y个数
逆序对期望为 分裂产生的子序列共有种,其中,长度为j的有种
则有:
本身期望 裂变期望
裂变期望包含变为本身(子序列为本身),移项将其消去得到递推式:
得到f(i)的递推公式,带入i=2和i=3,得到f(2)=2/3 f(3)=2,和我们之前的计算结果相同,故式子正确。
解题方法
我们可以在O(n^2)时间内根据递推式求出每个f(i)
并求出其前缀和,这样便可以通过
在O(1)时间内解决每个询问。
代码
太懒了,就贴个std吧
#include<bits/stdc++.h>
using namespace std;
#define fi first
#define se second
#define pb push_back
#define mp make_pair
#define rep(i, a, b) for(int i = (a); i < (b); ++i)
#define per(i, a, b) for(int i = (b) - 1; i >= (a); --i)
#define dd(a) cout << #a << " = " << a << " "
#define de(a) cout << #a << " = " << a << endl
#define sz(a) (int)a.size()
#define all(a) a.begin(), a.end()
#define pw(a) (1ll << (a))
#define endl "\n"
typedef long long ll;
typedef pair<int, int> pii;
typedef vector<int> vi;
typedef double db;const int N = 3030, P = 998244353;inline int add(int a, int b) {if((a += b) >= P) a -= P;return a;
}
inline int mul(int a, int b) {return 1ll * a * b % P;
}
inline int kpow(int a, int b) {int r = 1;while(b) {if(b & 1) r = r * 1ll * a % P;a = a * 1ll * a % P;b >>= 1;}return r;
}int n, f[N], C[N][N], pw[N];int main() {std::ios::sync_with_stdio(0);std::cin.tie(0);rep(i, 0, N) C[i][0] = C[i][i] = 1;rep(i, 1, N) rep(j, 1, i) C[i][j] = add(C[i - 1][j - 1], C[i - 1][j]);pw[0] = 1;rep(i, 1, N) pw[i] = pw[i - 1] * 2ll % P;rep(i, 2, N) {f[i] = mul(mul(i, i - 1), pw[i - 2]);rep(j, 0, i) f[i] = add(f[i], mul(C[i][j], f[j]));f[i] = mul(f[i], kpow(pw[i] - 1, P - 2));}while(cin >> n) {int ans = 0;rep(i, 1, n + 1) ans = add(ans, f[i]);ans = mul(ans, kpow(n, P - 2));cout << ans << endl;}return 0;
}
至于O(1)公式(n^2-1)/9为什么正确- -我不知道,反正我没推出来,题解也没说。
hdu6595 Everything Is Generated In Equal Probability 数学期望相关推荐
- [hdu6595]Everything Is Generated In Equal Probability
计算一对逆序对的贡献,即在n个数期望要删多少步才能删掉其中的两个数,设f(n)表示此时的期望,则有方程$f[n]=3/4+(\sum_{i=2}^{n}f[i]\cdot c(n-2,i-2))/2^ ...
- HDU 6595 Everything Is Generated In Equal Probability (期望dp,线性推导)
Everything Is Generated In Equal Probability \[ Time Limit: 1000 ms\quad Memory Limit: 131072 kB \] ...
- HDU 6595 Everything Is Generated In Equal Probability(概率+组合数)
题面 One day, Y_UME got an integer NN and an interesting program which is shown below: Y_UME wants to ...
- 2019 杭电多校 E - Everything Is Generated In Equal Probability HDU 6595 数学
给了你一个程序 程序 S1 将传入的 数组 返回一个随机子序列(不一定连续) 程序 S2 算这个数组 逆序对数量 程序 S3 算这个数组 经过S1 之后 用S2算逆序对数量 到这里 我们知道了 这个程 ...
- hdu多校第二场 1005 (hdu6595) Everything Is Generated In Equal Probability
题意: 给定一个N,随机从[1,N]里产生一个n,然后随机产生一个n个数的全排列,求出n的逆序数对的数量,加到cnt里,然后随机地取出这个全排列中的一个非连续子序列(注意这个子序列可以是原序列),再求 ...
- Everything Is Generated In Equal Probability HDU-6595 期望DP
Solution dp[n]=E+∑i=0n−1Cnidp[i]+dp[n]2ndp[n]=E+\frac{\sum\limits_{i=0}^{n-1}C_n^idp[i]+dp[n]}{2^n}d ...
- Everything Is Generated In Equal Probability(HDU - 6595,概率期望)
一.题目链接: HDU-6595 二.题目大意: 题目给定一个正整数N. 在区间[1, N]中随机等概率地选取一个正整数n,然后随机等概率地生成一个长度为n的排列A,然后调用函数 CALCULATE( ...
- HDU 6595. Everything Is Generated In Equal Probability (期望+逆元)
题目: http://acm.hdu.edu.cn/showproblem.php?pid=6595 分析: 设f(n)=Calculate(Array)×Probability[Calculate( ...
- Everything Is Generated In Equal Probability HDU 6595(期望dp)
大致题意 好像是给一个数字n,然后随机选择一个1到n的数字,对其排列进行这样一种运算.首先res加上当前排列的逆序对数,然后再随机选择当前数列的子序列,继续进行该运算直到子序列长度为0.求res的期望 ...
最新文章
- java编辑简单文本编辑器_简单的Java纯文本编辑器
- linux系统各文件夹的作用,linux系统文件夹的作用 good
- centos7 安装git_如何在 CentOS 7 上挂载 Amazon EFS 文件系统?
- 发文平台对文章发布的基本要求
- 如何构建高并发高可用的剧场直播云端混流服务?
- 荣耀9igoogle模式_iGoogle个性化主页的6种替代方法
- 【区间DP】摆渡线路(2017 特长生 T4)
- 分治 —— 简单分治
- LOJ#6283. 数列分块入门 7
- xmpp 常见错误 一
- lambda 对象去重_采用java8 lambda表达式 实现 java list 交集 并集 差集 去重复并集...
- 云计算学习总结(1)——PaaS云平台部署之在Centos7搭建Mesos+Zookeeper+Marathon+Docker单机集群...
- treeview找到节点并展开_我们从100个经典韩剧中,找到8个「神套路」,这样写抖音剧本个个都是爆款!...
- 【干货】31篇关于深度学习必读论文汇总(附论文下载地址)
- MacBook安装Mysql
- miui怎么用第三方图标包_Burn安卓手机图标包 手机美化从图标开始
- php小程序秒抢高并发,微信小程序的10个请求并发限制的优化消息!!!
- foxmail邮件服务器端口,Foxmail设置教程
- 不要为优势忘乎所以——职场人士寓言(6)
- 没人教的项目管理方法之(练好你的站桩) 一、 干系人分析应该怎么做