Description

有一个n个点的环,有一个指针会从1号点开始向后扫描,每次扫描有p的概率删除当前点

询问每个点最后一个被删除的概率。

答案对998244353取模

n<=200000

Solution

直接计算要考虑前后两部分比较麻烦,我们不妨先考虑1号点如何计算。

记\(f_n\)表示n个点的环1号点最后一个被删除的概率。

枚举一轮中删去了几个

\[f_n=\sum\limits_{i=0}^{n-1}p^i(1-p)^{n-i}{n-1\choose i}f_{n-i}
\]

把i=0那一项移过来,可以得到一个递推式,显然可以用分治FFT加速。

这样是两个log的,我们有更优秀的做法。

枚举1号点最后在第k+1轮被淘汰,那么其他点至多在第k轮就被淘汰

\[f_n=\sum\limits_{k\geq 0}p(1-p)^k(1-(1-p)^k)^{n-1}
\]

二项式展开

\[=\sum\limits_{k\geq 0}p(1-p)^k\sum\limits_{j=0}^{n-1}(-1)^j(1-p)^{kj}{n-1\choose j}
\]

交换主体,整理

\[=p\sum\limits_{j=0}^{n-1}(-1)^j{n-1\choose j}\sum\limits_{k\geq 0}(1-p)^{k(j+1)}
\]

\[=p\sum\limits_{j=0}^{n-1}(-1)^j{n-1\choose j}{1\over 1-(1-p)^{j+1}}
\]

直接FFT,就是一个log的了

有了f考虑计算最后的答案,我们只需要枚举第一轮中这一个点前面删除了多少个即可,剩下的部分这个点就是第一个人了。

记\(S_i\)为i号点的答案。

易得

\[S_i=\sum\limits_{j=0}^{i-1}{i-1\choose j}p^j(1-p)^{i-1-j}f_{n-i}
\]

也是一个FFT解决

总的时间复杂度\(O(n\log n)\)

Code

#include <bits/stdc++.h>
#define fo(i,a,b) for(int i=a;i<=b;++i)
#define fod(i,a,b) for(int i=a;i>=b;--i)
const int M=524288;
const int mo=998244353;
typedef long long LL;
using namespace std;
LL js[M+1],ny[M+1];
LL n,pl;
LL ksm(LL k,LL n)
{
LL s=1;
for(;n;n>>=1,k=k*k%mo) if(n&1) s=s*k%mo;
return s;
}
namespace poly
{
int wi[M+1],bit[M+1],ns;
void prp()
{
wi[0]=1,wi[1]=ksm(3,(mo-1)/M);
fo(i,1,M)
{
wi[i]=(LL)wi[i-1]*wi[1]%mo;
bit[i]=(bit[i>>1]>>1)|((i&1)<<18);
}
ns=ksm(M,mo-2);
}
void DFT(int *a)
{
fo(i,0,M-1) if(i<bit[i]) swap(a[i],a[bit[i]]);
for(int h=1,l=M>>1;h<M;h<<=1,l>>=1)
{
for(int j=0;j<M;j+=h<<1)
{
int *x=a+j,*y=x+h,wn=wi[l],w=1,v;
for(int i=0;i<h;i++,x++,y++,w=(LL)w*wn%mo)
{
v=(LL)*y *w%mo;
*y=(*x-v+mo)%mo,*x=(*x+v)%mo;
}
}
}
}
void IDFT(int *a)
{
DFT(a);
fo(i,0,M-1) a[i]=(LL)a[i]*ns%mo;
reverse(a+1,a+M);
}
}
using namespace poly;
int a[M+1],b[M+1],f[M+1];
int main()
{
LL al,bl;
cin>>n>>al>>bl; js[0]=1;
fo(i,1,n) js[i]=js[i-1]*i%mo;
ny[n]=ksm(js[n],mo-2);
fod(i,n-1,0) ny[i]=ny[i+1]*(i+1)%mo;
pl=al*ksm(bl,mo-2)%mo;
LL v=1,r=(mo+1-pl)%mo;
fo(i,0,n-1)
{
a[i]=ny[i],b[i]=v*ksm((mo+1-r)%mo,mo-2)%mo*ny[i]%mo;
r=(1-pl+mo)%mo*r%mo;
v=mo-v;
}
prp();
DFT(a),DFT(b);
fo(i,0,M-1) a[i]=(LL)a[i]*b[i]%mo;
IDFT(a);
fo(i,1,n) f[i]=(LL)a[i-1]*js[i-1]%mo*pl%mo;
memset(a,0,sizeof(a)),memset(b,0,sizeof(b));
r=1;LL r1=1;
fo(i,0,n-1)
{
a[i]=ny[i]*r%mo*f[n-i]%mo,b[i]=ny[i]*r1%mo;
r=r*pl%mo,r1=r1*(mo+1-pl)%mo;
}
DFT(a),DFT(b);
fo(i,0,M-1) a[i]=(LL)a[i]*b[i]%mo;
IDFT(a);
fo(i,1,n) printf("%lld\n",(LL)a[i-1]*js[i-1]%mo);
}

【杂题】【CometOJ Contest #5】E:迫真大游戏【概率】【排列组合】【多项式】的更多相关文章

  1. Comet OJ - Contest #5 E 迫真大游戏

    怎么说,看了推到之后真的不难,事实上确实也蛮友好(可能咱就是想不出多项式题目的做法???),除了用到了分治法法塔就比较毒瘤 花了一个晚上以及一个上午做这么一道题...(还是太菜了) Result1 分 ...

  2. Comet OJ - Contest #5 D 迫真小游戏 (堆+set)

    迫真小游戏 已经提交 已经通过 时间限制:2000ms 内存限制:256MB 73.98% 提交人数:196 通过人数:145 题目描述 H君喜欢在阳台晒太阳,闲暇之余他会玩一些塔防小游戏. H君玩的 ...

  3. 贪心/构造/DP 杂题选做Ⅲ

    颓!颓!颓!(bushi 前传: 贪心/构造/DP 杂题选做 贪心/构造/DP 杂题选做Ⅱ 51. CF758E Broken Tree 讲个笑话,这道题是 11.3 模拟赛的 T2,模拟赛里那道题的 ...

  4. 正睿OI DAY3 杂题选讲

    正睿OI DAY3 杂题选讲 CodeChef MSTONES n个点,可以构造7条直线使得每个点都在直线上,找到一条直线使得上面的点最多 随机化算法,check到答案的概率为\(1/49\) \(n ...

  5. dp杂题(根据个人进度选更)

    ----19.7.30 今天又开了一个新专题,dp杂题,我依旧按照之前一样,这一个专题更在一起,根据个人进度选更题目; dp就是动态规划,本人认为,动态规划的核心就是dp状态的设立以及dp转移方程的推 ...

  6. wangkoala杂题总集(根据个人进度选更)

    CQOI2014 数三角形 首先一看题,先容斥一波,求出网格内选三个点所有的情况,也就是C(n*m,3);然后抛出行里三点共线的方案数:C(n,3)*m; 同理就有列中三点共线的方案数:n*C(m,3 ...

  7. 2019暑期金华集训 Day6 杂题选讲

    自闭集训 Day6 杂题选讲 CF round 469 E 发现一个数不可能取两次,因为1,1不如1,2. 发现不可能选一个数的正负,因为1,-1不如1,-2. hihoCoder挑战赛29 D 设\ ...

  8. Atcoder&CodeForces杂题11.7

    Preface 又自己开了场CF/Atcoder杂题,比昨天的稍难,题目也更有趣了 昨晚炉石检验血统果然是非洲人... 希望这是给NOIP2018续点rp吧 A.CF1068C-Colored Roo ...

  9. Codeforces 杂题集 2.0

      记录一些没有写在其他随笔中的 Codeforces 杂题, 以 Problemset 题号排序   1326D2 - Prefix-Suffix Palindrome (Hard version) ...

随机推荐

  1. 【转贴】使用sar进行性能分析

    使用sar进行性能分析 https://www.cnblogs.com/bangerlee/articles/2545747.html 很早之前就看过 但是自己一直没用过.. 2012-06-12 0 ...

  2. MySQL中出现的小问题

    ./scripts/mysql_install_db: line 249: /app/mysql/bin/my_print_defaults: cannot execute binary fileNe ...

  3. CF 403D Beautiful Pairs of Numbers

    The sequence of integer pairs (a1, b1), (a2, b2), ..., (ak, bk) is beautiful, if the following state ...

  4. Spring Boot全局支持CORS(跨源请求)

    import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet. ...

  5. springMvc接受单个文件,多个文件,多组文件

    web端 <form id="iconForm" enctype="multipart/form-data"></form> JS:通过 ...

  6. 在web项目中配置log4j

    在web.xml中添加如下代码 <context-param> <param-name>contextConfigLocation</param-name> < ...

  7. C# 面向对象6 之前的复习

    复习练习 THIS:调用当前类的构造函数

  8. iis 8.0 HTTP 错误 404.3 server 2012

    最近在学习WCF,发现将网站WCF服务放到IIS上时不能正常运行,从网上搜了一下: 解决方法,以管理员身份进入命令行模式,运行: "%windir%\Microsoft.NET\Framew ...

  9. ACM的一点基础知识

    所摘内容来自于XJTU小学期ACM培训PPT log 默认以2为底 计算机一秒可以看作1e8次 保证数据计算精度及数据所需必要大小 a=1LL*a*a%p//在计算时通过乘以1LL,临时将Int转化为 ...

  10. vue中v-if和v-for优先级

    v-for和v-if不应该一起使用,必要情况下应该替换成computed属性.原因:v-for比v-if优先,如果每一次都需要遍历整个数组,将会影响速度,尤其是当之需要渲染很小一部分的时候.   错误 ...