\(\bf Description\)

一个 \(0\) 到 \(n-1\) 的随机数生成器,生成 \(i\) 的概率是 \(A_i/S\) ,其中 \(S=\sum_{i=0}^{n-1} A_i\) ,请你求出每个数出现次数 \(\geq B_i\) 的期望次数。

\(\bf Solution\)

什么生成函数爆推的做法一点不会啊……

min-max容斥,考虑每个集合最早出现出现次数 \(\geq B_i\) 的数的期望时间,由期望可加性,就是所有数 \(<B_i\) 的局面的期望出现次数之和。

对于一个集合,下一步跳出它的概率 \(P=\frac{s}{S}\) ,\(s\) 是集合中的 \(A_i\) 之和。如果我们知道它出现的概率是 \(p\) ,那么它存在的期望次数就是 \(\frac{p}{P}\) 。

然后考虑一下 \(p\) 这个东西怎么算,假如现在已经生成的数的概率为 \(t_1\) 到 \(t_m\) ,个数是 \(x_1\) 到 \(x_m\) ,且设 \(X\) 为总和,那么可得(对这个柿子还是有点困惑啊……懂,但是自己推就是错的,很自闭)

\[p=X! \prod_{i=1}^{m} \left( \frac{t_i}{s} \right)^{x_i} \frac{1}{x_i!}
=\frac{X!}{s^X} \prod_{i=1}^m \frac{t_i^{x_i}}{x_i!}
\]

\(f_{i,j,k}\) 表示前 \(i\) 个数,\(X=j\) ,\(s=k\) 的贡献(所谓的贡献,是容斥之后的贡献,并且dp的时候只算 \(\prod\) 后面那一部分),然后背包一下就好了。

然后我开始写,然后我又算不清复杂度了……为什么最近老这样……

有个坑是当前这个数就算是0个,那也和不在集合是不一样的……然后我还把 \(\frac{1}{P}\) 弄成 \(P\) 了……

由于太懒了,所以就很不优雅地for到400了……

#include<bits/stdc++.h>
#define ll long long
#define fr(i,x,y) for(int i=(x);i<=(y);i++)
#define rf(i,x,y) for(int i=(x);i>=(y);i--)
#define frl(i,x,y) for(int i=(x);i<(y);i++)
using namespace std;
const int N=404;
const int p=998244353;
int n,a[N],b[N];
ll f[N][N]; void read(int &x){ scanf("%d",&x); } ll qpow(ll sum,ll n){
ll ans=1;
for(;n;n>>=1,sum=sum*sum%p) if (n&1) ans=ans*sum%p;
return ans;
} ll mul[N],inv[N];
void init(){
mul[0]=1;
frl(i,1,N) mul[i]=mul[i-1]*i%p;
inv[N-1]=qpow(mul[N-1],p-2);
rf(i,N-2,0) inv[i]=inv[i+1]*(i+1)%p;
} void Add(ll &x,ll y){
x+=y;//x%=p;
if (x<0) x+=p;
if (x>=p) x-=p;
} int main(){
init();
read(n);
fr(i,1,n) read(a[i]),read(b[i]);
int S=0;
fr(i,1,n) S+=a[i];
//S=qpow(S,p-2);
f[0][0]=p-1;
fr(i,1,n)
rf(k,400,0)
fr(j,0,400)
frl(x,0,b[i])
if (f[j][k]) Add(f[j+x][k+a[i]],p-f[j][k]*qpow(a[i],x)%p*inv[x]%p);
ll ans=0;
fr(j,0,400)
fr(k,1,400)
Add(ans,mul[j]*f[j][k]%p*qpow(k,p-1-j)%p*qpow(k,p-2)%p*S%p);
cout<<ans<<endl;
return 0;
}

AtCoder Grand Contest 038E - Gachapon的更多相关文章

  1. AtCoder Grand Contest 012

    AtCoder Grand Contest 012 A - AtCoder Group Contest 翻译 有\(3n\)个人,每一个人有一个强大值(看我的假翻译),每三个人可以分成一组,一组的强大 ...

  2. AtCoder Grand Contest 011

    AtCoder Grand Contest 011 upd:这篇咕了好久,前面几题是三周以前写的... AtCoder Grand Contest 011 A - Airport Bus 翻译 有\( ...

  3. AtCoder Grand Contest 031 简要题解

    AtCoder Grand Contest 031 Atcoder A - Colorful Subsequence description 求\(s\)中本质不同子序列的个数模\(10^9+7\). ...

  4. AtCoder Grand Contest 010

    AtCoder Grand Contest 010 A - Addition 翻译 黑板上写了\(n\)个正整数,每次会擦去两个奇偶性相同的数,然后把他们的和写会到黑板上,问最终能否只剩下一个数. 题 ...

  5. AtCoder Grand Contest 009

    AtCoder Grand Contest 009 A - Multiple Array 翻译 见洛谷 题解 从后往前考虑. #include<iostream> #include< ...

  6. AtCoder Grand Contest 008

    AtCoder Grand Contest 008 A - Simple Calculator 翻译 有一个计算器,上面有一个显示按钮和两个其他的按钮.初始时,计算器上显示的数字是\(x\),现在想把 ...

  7. AtCoder Grand Contest 007

    AtCoder Grand Contest 007 A - Shik and Stone 翻译 见洛谷 题解 傻逼玩意 #include<cstdio> int n,m,tot;char ...

  8. AtCoder Grand Contest 006

    AtCoder Grand Contest 006 吐槽 这套题要改个名字,叫神仙结论题大赛 A - Prefix and Suffix 翻译 给定两个串,求满足前缀是\(S\),后缀是\(T\),并 ...

  9. AtCoder Grand Contest 005

    AtCoder Grand Contest 005 A - STring 翻译 给定一个只包含\(ST\)的字符串,如果出现了连续的\(ST\),就把他删去,然后所有位置前移.问最后剩下的串长. 题解 ...

随机推荐

  1. ELK 学习笔记之 Logstash安装

    Logstash安装: https://www.elastic.co/downloads/logstash 下载解压: tar –zxvf logstash-5.6.1.tar.gz 在/usr/lo ...

  2. <<Java并发编程的艺术>>-阅读笔记和思维导图

    最近在坚持每天阅读<>,不但做好笔记(MarkDown格式),还做好思维导图. 如果大家感兴趣,可以可以到码云上阅读笔记和到ProcessOn上阅读思维导图. 码云:https://git ...

  3. java第2天:类,对象,封装和构造方法

    1 面向对象简述 将 {1,3,45,56,78,90}转化为[1,3,45,56,78,90] 1-2 方法1:面向过程 代码块 public class test { public static ...

  4. android 6.0导航栏 NavigationBar影响视图解决办法

    在开发app的时候会遇到有些测试手机没有物理按钮,比如最近在做的一个app在小米手机上运行显示效果很好,但是在华为P7手机上显示就乱了,底部的NavigationBar直接覆盖在主视图上,导致按钮无法 ...

  5. 个性化推荐产品功能的设计和B端产品的功能策划方式

    宜信科技中心财富管理产品部负责人Bob,与大家一起聊聊个性化推荐产品功能的设计和B端产品的功能策划方式. 拓展阅读:回归架构本质,重新理解微服务|专访宜信开发平台(SIA)负责人梁鑫 智慧金融时代,大 ...

  6. Flask学习之旅--Flask项目部署

    一.写在前面 Flask 作为一个轻量级的 Web 框架,具有诸多优点,灵活方便,扩展性强,开发文档也很丰富.在开发调试的过程中,我们往往会使用 Flask 自带的 Web 服务器,但如果要投入到生产 ...

  7. CSS 选择符有哪些?哪些属性可以继承?优先级算法如何计算?

    CSS 选择符有哪些? 1.id选择器(#id) 2.类选择器(.class) 3.标签选择器(div,h1,p) 4.相邻选择器(h1 + p) 5.子选择器(ul > li) 6.后代选择器 ...

  8. 网页布局——grid语法属性详解

    grid目前兼容性目前还可以,主流浏览器对它的支持力度很大,ie9,10宣布它未来不久会对它有很好的支持,目前则需要使用过时的语法.我相信不久的将来grid将成为每一个前端工作人员必备的布局技能. 属 ...

  9. 使用malloc函数或new运算符为链表结点分配内存空间

    目录 使用malloc函数或new运算符为链表结点分配内存空间 使用malloc函数或new运算符为链表结点分配内存空间 当我们定义链表结点类型后,如何在每次需要使用新结点时临时分配相应大小的内存空间 ...

  10. 1046 Shortest Distance (20 分)

    1046 Shortest Distance (20 分) The task is really simple: given N exits on a highway which forms a si ...