\(\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. FTP协议的主动模式和被动模式的区别

    最近准备做一个<FtpCopy系列教程>,主要讲解Ftp协议主动模式和被动模式的区别.以及FTP服务器的安装部署,然后通过几个常用实例演示,详细讲解如何使用FtpCopy进行数据自动备份. ...

  2. IDEA 学习笔记之 1.5已经过时问题

    1.5已经过时问题: apache-maven-3.5.0\conf\settings.xml添加: <profile> <id>jdk-1.8</id> < ...

  3. web前端之面试:自我介绍

    面试官您好, 首先很感谢贵公司的面试邀请, 让我有这个幸运机会能来到这里和您交流 : 接下来我做一个简单的自我介绍: 我的姓名是 XX, 祖籍是XX, 年龄是24, 学校是 XXX, 专业是XXX: ...

  4. springmvc框架的使用

    1.在idea中新建java web项目,引入spring和springmvc所需jar包,其中 spring-web-3.2.12.RELEASE.jar:在web应用开发时使用spring框架所需 ...

  5. 解决window.onload延迟加载问题

    window.onload方法,表示当页面所有的元素都加载完毕,并且所有要请求的资源也加载完毕才触发执行function这个匿名函数里边的具体内容.这样肯定保证了代码在domReady之后执行.使用w ...

  6. Android仿美团地址选择

    最近做了这个功能,分享一下,用的是百度地图api,和美团外卖的地址选择界面差不多,也就是可以搜索或者滑动地图展示地址列表给用户选择,看下效果图先. 文章重点 1.展示地图并定位到“我”的位置2.滑动地 ...

  7. SVN应用

    一:从服务器上down资料 1.在电脑上安装SVN客户端 2.在电脑本地创建个文件夹作为版本库 3.进入xfssvn文件夹右击鼠标选择SVN Checkout或SVN Update 4.输入服务器中配 ...

  8. 浅谈celery的坑

    celery celery的使用以及在Django中的配置,不详细介绍,主要记录在Django中使用的坑点. 坑点 时区问题 celery默认的时区是世界标准时间,比东八区慢了8个小时,如果发布定时任 ...

  9. 使用Swagger服务搭建.Net Core API

    使用Swagger服务搭建.Net Core API 创建.Net Core API 新建项目.文件——新建——项目 选择应用程序模板. 设置存放路径,命名方案名称. 创建API. 搭建成功. 使用S ...

  10. c++11::std::remove_reference

    引用移除 : remove_reference 引用折叠规则 A& & 折叠成 A&  A& && 折叠成 A&  A&& &a ...