\(\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. 什么是ECMAScript、什么又是ECMA?

    转载:针对于ECMA5Script .ECMAScript6.TypeScript的认识 什么是ECMAScript.什么又是ECMA? Ecma国际(Ecma International)是一家国际 ...

  2. 《Java语言程序设计》编程练习8.9(游戏:#字游戏)

    8.9 (游戏:#字游戏)在并字游戏中,两个玩家使用各自的标志(一方用X则另一方就用O),轮流填写3x3的网格中的某个空格.当一个玩家在网格的水平方向.垂直方向或者对角线方向上出 现了三个相同的X或三 ...

  3. e课表项目第二次冲刺周期第七天

    昨天干了什么? 昨天我查找相关的资料实现对之前的信息连接数据库进行显示,完成修改的功能,并且返回到数据库当中.然后下午,我和我们小组的成员,讨论了第二个界面的具体功能和布局,我们一致同意,引用之前的第 ...

  4. Cutting Sticks UVA - 10003

    题文: 见:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_proble ...

  5. 点云之OpenMesh:error C1083:无法打开包括文件:“OpenMesh/Core/IO/MeshIO.hh”:No such file or directory

    1.这是一个错误引发的惨案:错误提示如下: 在进行点云程序调试时,出现错误:[error C1083:无法打开包括文件:“OpenMesh/Core/IO/MeshIO.hh”:No such fil ...

  6. 讲真,MySQL索引优化看这篇文章就够了

    本文主要讨论MySQL索引的部分知识.将会从MySQL索引基础.索引优化实战和数据库索引背后的数据结构三部分相关内容,下面一一展开. 一.MySQL——索引基础 首先,我们将从索引基础开始介绍一下什么 ...

  7. 常用windows命令

    目录 本教程概述 用到的工具 标签 简介 1.cmd的一些规则 2.cd切换目录命令 3.dir显示目录命令 4.type显示文本内容 5.del 删除文件 6.查看IP地址 7.net 命令 8.n ...

  8. 前端深入之css篇丨初探【transform】,手把手带你实现1024程序员节动画

    写在前面 马上就2020年了,不知道小伙伴们今年学习了css3动画了吗? 说起来css动画是一个很尬的事,一方面因为公司用css动画比较少,另一方面大部分开发者习惯了用JavaScript来做动画,所 ...

  9. epoll--IO多路复用

    理解 epoll 过程 #include <stdio.h> #include <stdlib.h> #include <string.h> #include &l ...

  10. Unity3D 通过JSON查询天气

    一.天气查询API 获取天气信息,首先要找到提供天气数据的接口,我使用的是高德地图免费为我们提供的,网址为 https://lbs.amap.com/api/webservice/guide/api/ ...