【杂题】【CometOJ Contest #5】E:迫真大游戏【概率】【排列组合】【多项式】
Description
有一个n个点的环,有一个指针会从1号点开始向后扫描,每次扫描有p的概率删除当前点
询问每个点最后一个被删除的概率。
答案对998244353取模
n<=200000
Solution
直接计算要考虑前后两部分比较麻烦,我们不妨先考虑1号点如何计算。
记\(f_n\)表示n个点的环1号点最后一个被删除的概率。
枚举一轮中删去了几个
\]
把i=0那一项移过来,可以得到一个递推式,显然可以用分治FFT加速。
这样是两个log的,我们有更优秀的做法。
枚举1号点最后在第k+1轮被淘汰,那么其他点至多在第k轮就被淘汰
\]
二项式展开
\]
交换主体,整理
\]
\]
直接FFT,就是一个log的了
有了f考虑计算最后的答案,我们只需要枚举第一轮中这一个点前面删除了多少个即可,剩下的部分这个点就是第一个人了。
记\(S_i\)为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:迫真大游戏【概率】【排列组合】【多项式】的更多相关文章
- Comet OJ - Contest #5 E 迫真大游戏
		
怎么说,看了推到之后真的不难,事实上确实也蛮友好(可能咱就是想不出多项式题目的做法???),除了用到了分治法法塔就比较毒瘤 花了一个晚上以及一个上午做这么一道题...(还是太菜了) Result1 分 ...
 - Comet OJ - Contest #5 D 迫真小游戏 (堆+set)
		
迫真小游戏 已经提交 已经通过 时间限制:2000ms 内存限制:256MB 73.98% 提交人数:196 通过人数:145 题目描述 H君喜欢在阳台晒太阳,闲暇之余他会玩一些塔防小游戏. H君玩的 ...
 - 贪心/构造/DP 杂题选做Ⅲ
		
颓!颓!颓!(bushi 前传: 贪心/构造/DP 杂题选做 贪心/构造/DP 杂题选做Ⅱ 51. CF758E Broken Tree 讲个笑话,这道题是 11.3 模拟赛的 T2,模拟赛里那道题的 ...
 - 正睿OI DAY3 杂题选讲
		
正睿OI DAY3 杂题选讲 CodeChef MSTONES n个点,可以构造7条直线使得每个点都在直线上,找到一条直线使得上面的点最多 随机化算法,check到答案的概率为\(1/49\) \(n ...
 - dp杂题(根据个人进度选更)
		
----19.7.30 今天又开了一个新专题,dp杂题,我依旧按照之前一样,这一个专题更在一起,根据个人进度选更题目; dp就是动态规划,本人认为,动态规划的核心就是dp状态的设立以及dp转移方程的推 ...
 - wangkoala杂题总集(根据个人进度选更)
		
CQOI2014 数三角形 首先一看题,先容斥一波,求出网格内选三个点所有的情况,也就是C(n*m,3);然后抛出行里三点共线的方案数:C(n,3)*m; 同理就有列中三点共线的方案数:n*C(m,3 ...
 - 2019暑期金华集训 Day6 杂题选讲
		
自闭集训 Day6 杂题选讲 CF round 469 E 发现一个数不可能取两次,因为1,1不如1,2. 发现不可能选一个数的正负,因为1,-1不如1,-2. hihoCoder挑战赛29 D 设\ ...
 - Atcoder&CodeForces杂题11.7
		
Preface 又自己开了场CF/Atcoder杂题,比昨天的稍难,题目也更有趣了 昨晚炉石检验血统果然是非洲人... 希望这是给NOIP2018续点rp吧 A.CF1068C-Colored Roo ...
 - Codeforces 杂题集 2.0
		
记录一些没有写在其他随笔中的 Codeforces 杂题, 以 Problemset 题号排序 1326D2 - Prefix-Suffix Palindrome (Hard version) ...
 
随机推荐
- 【转贴】使用sar进行性能分析
			
使用sar进行性能分析 https://www.cnblogs.com/bangerlee/articles/2545747.html 很早之前就看过 但是自己一直没用过.. 2012-06-12 0 ...
 - MySQL中出现的小问题
			
./scripts/mysql_install_db: line 249: /app/mysql/bin/my_print_defaults: cannot execute binary fileNe ...
 - CF 403D Beautiful Pairs of Numbers
			
The sequence of integer pairs (a1, b1), (a2, b2), ..., (ak, bk) is beautiful, if the following state ...
 - Spring Boot全局支持CORS(跨源请求)
			
import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet. ...
 - springMvc接受单个文件,多个文件,多组文件
			
web端 <form id="iconForm" enctype="multipart/form-data"></form> JS:通过 ...
 - 在web项目中配置log4j
			
在web.xml中添加如下代码 <context-param> <param-name>contextConfigLocation</param-name> < ...
 - C# 面向对象6 之前的复习
			
复习练习 THIS:调用当前类的构造函数
 - iis 8.0 HTTP 错误 404.3 server 2012
			
最近在学习WCF,发现将网站WCF服务放到IIS上时不能正常运行,从网上搜了一下: 解决方法,以管理员身份进入命令行模式,运行: "%windir%\Microsoft.NET\Framew ...
 - ACM的一点基础知识
			
所摘内容来自于XJTU小学期ACM培训PPT log 默认以2为底 计算机一秒可以看作1e8次 保证数据计算精度及数据所需必要大小 a=1LL*a*a%p//在计算时通过乘以1LL,临时将Int转化为 ...
 - vue中v-if和v-for优先级
			
v-for和v-if不应该一起使用,必要情况下应该替换成computed属性.原因:v-for比v-if优先,如果每一次都需要遍历整个数组,将会影响速度,尤其是当之需要渲染很小一部分的时候. 错误 ...