链接

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 数学期望相关推荐

  1. [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^ ...

  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 \] ...

  3. 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 ...

  4. 2019 杭电多校 E - Everything Is Generated In Equal Probability HDU 6595 数学

    给了你一个程序 程序 S1 将传入的 数组 返回一个随机子序列(不一定连续) 程序 S2 算这个数组 逆序对数量 程序 S3 算这个数组 经过S1 之后 用S2算逆序对数量 到这里 我们知道了 这个程 ...

  5. hdu多校第二场 1005 (hdu6595) Everything Is Generated In Equal Probability

    题意: 给定一个N,随机从[1,N]里产生一个n,然后随机产生一个n个数的全排列,求出n的逆序数对的数量,加到cnt里,然后随机地取出这个全排列中的一个非连续子序列(注意这个子序列可以是原序列),再求 ...

  6. 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 ...

  7. Everything Is Generated In Equal Probability(HDU - 6595,概率期望)

    一.题目链接: HDU-6595 二.题目大意: 题目给定一个正整数N. 在区间[1, N]中随机等概率地选取一个正整数n,然后随机等概率地生成一个长度为n的排列A,然后调用函数 CALCULATE( ...

  8. HDU 6595. Everything Is Generated In Equal Probability (期望+逆元)

    题目: http://acm.hdu.edu.cn/showproblem.php?pid=6595 分析: 设f(n)=Calculate(Array)×Probability[Calculate( ...

  9. Everything Is Generated In Equal Probability HDU 6595(期望dp)

    大致题意 好像是给一个数字n,然后随机选择一个1到n的数字,对其排列进行这样一种运算.首先res加上当前排列的逆序对数,然后再随机选择当前数列的子序列,继续进行该运算直到子序列长度为0.求res的期望 ...

最新文章

  1. java编辑简单文本编辑器_简单的Java纯文本编辑器
  2. linux系统各文件夹的作用,linux系统文件夹的作用 good
  3. centos7 安装git_如何在 CentOS 7 上挂载 Amazon EFS 文件系统?
  4. 发文平台对文章发布的基本要求
  5. 如何构建高并发高可用的剧场直播云端混流服务?
  6. 荣耀9igoogle模式_iGoogle个性化主页的6种替代方法
  7. 【区间DP】摆渡线路(2017 特长生 T4)
  8. 分治 —— 简单分治
  9. LOJ#6283. 数列分块入门 7
  10. xmpp 常见错误 一
  11. lambda 对象去重_采用java8 lambda表达式 实现 java list 交集 并集 差集 去重复并集...
  12. 云计算学习总结(1)——PaaS云平台部署之在Centos7搭建Mesos+Zookeeper+Marathon+Docker单机集群...
  13. treeview找到节点并展开_我们从100个经典韩剧中,找到8个「神套路」,这样写抖音剧本个个都是爆款!...
  14. 【干货】31篇关于深度学习必读论文汇总(附论文下载地址)
  15. MacBook安装Mysql
  16. miui怎么用第三方图标包_Burn安卓手机图标包 手机美化从图标开始
  17. php小程序秒抢高并发,微信小程序的10个请求并发限制的优化消息!!!
  18. foxmail邮件服务器端口,Foxmail设置教程
  19. 不要为优势忘乎所以——职场人士寓言(6)
  20. 没人教的项目管理方法之(练好你的站桩) 一、 干系人分析应该怎么做

热门文章

  1. idea maven报红,但是项目中有jar包,提示找不到xx类
  2. 以太网链路聚合工作原理总结
  3. oracle CLOB与BLOB的区别及使用
  4. 智能路灯引路冰蓄冷替空调
  5. 开源项目推荐:HandsFree机器人项目
  6. android桌面 文件夹路径是什么原因,安卓系统桌面快捷方式默认在哪个文件夹
  7. AutoCAD 2008运行提示正在验证许可解决办法
  8. 什么是无监督、监督、半监督学习
  9. FDC2214——电容传感器芯片的使用与配置(STM32控制)
  10. pip(Python包管理工具)安装第三方库教程