专栏文章

P14514 [NFLSPC #8] 如何区分北京东路和北京东路

P14514题解参与者 2已保存评论 1

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
1 条
当前快照
1 份
快照标识符
@min6wxvj
此快照首次捕获于
2025/12/01 21:33
3 个月前
此快照最后确认于
2025/12/01 21:33
3 个月前
查看原文
题号留念。

Analysis

由于操作是线性的,我们可以直接分析期望值的演化。
观察到每次重新分配后,威力总和不变。设 Ei(t)E_i^{(t)} 表示第 tt 次爆炸后城市 ii 的威力期望值。考虑一次爆炸的期望变化:
  1. 如果选中城市 ii,概率为 1n\frac{1}{n}Ei(t+1)=0E_i^{(t+1)}=0
  2. 如果选中其他城市 mm,概率为 n1n\frac{n-1}{n}Ei(t+1)=Ei(t)+Em(t)n1E_i^{(t+1)} = E_i^{(t)} + \frac{E_m^{(t)}}{n-1}
因此:
Ei(t+1)=1n0+1nmi[Ei(t)+Em(t)n1]E_i^{(t+1)} = \frac{1}{n} \cdot 0 + \frac{1}{n} \sum_{m \neq i} \left[ E_i^{(t)} + \frac{E_m^{(t)}}{n-1} \right]
化简得到:
Ei(t+1)=n1nEi(t)+1n(n1)miEm(t)E_i^{(t+1)} = \frac{n-1}{n} E_i^{(t)} + \frac{1}{n(n-1)} \sum_{m \neq i} E_m^{(t)}
SE(t)=i=1nEi(t)S_E^{(t)} = \sum_{i=1}^n E_i^{(t)}。注意到 miEm(t)=SE(t)Ei(t)\sum_{m \neq i} E_m^{(t)} = S_E^{(t)} - E_i^{(t)},代入得:
Ei(t+1)=n2n1Ei(t)+SE(t)n(n1)E_i^{(t+1)} = \frac{n-2}{n-1} E_i^{(t)} + \frac{S_E^{(t)}}{n(n-1)}
因为总期望 SE(t)S_E^{(t)} 是常数,等于初始总威力 SS,递推简化为:
Ei(t+1)=pEi(t)+qE_i^{(t+1)} = p E_i^{(t)} + q
其中 p=n2n1p = \frac{n-2}{n-1}q=Sn(n1)q = \frac{S}{n(n-1)}
解这个一阶线性递推,得到:
Ei(k)=pkai+Sn(1pk)E_i^{(k)} = p^k a_i + \frac{S}{n} (1 - p^k)
其中 p=n2n1p = \frac{n-2}{n-1}S=i=1naiS = \sum_{i=1}^n a_i

Code

CPP
#include <bits/stdc++.h>
using namespace std;
#define int long long
inline int read()
{
	int x=0,f=1;
	char ch=getchar();
	while(ch<'0'||ch>'9')
	{
		if(ch=='-')
			f=-1;
		ch=getchar();
	}
	while(ch>='0' && ch<='9')
		x=x*10+ch-'0',ch=getchar();
	return x*f;
}
const int maxN=1e6+5,mod=998244353;
int n,k,a[maxN];
int qpow(int x,int y,int p){ //快速幂
	int r=1;
	while(y){
		if(y&1) (r*=x)%=p;
		(x*=x)%=p;
		y>>=1;
	}
	return r;
}
int inv(int x,int p){ //除法转化为乘逆元
	return qpow(x,p-2,p);
}
signed main(){
	ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
	cin>>n>>k;
	int s=0;
	for(int i=1;i<=n;++i)
		cin>>a[i],(s+=a[i])%=mod;
	int p=(n-2+mod)%mod*inv(n-1,mod)%mod;
	int ppowk=qpow(p,k,mod);
	int sdivn=s*inv(n,mod)%mod;
	for(int i=1;i<=n;++i)
		cout<<(ppowk*a[i]%mod+sdivn*(1-ppowk+mod)%mod)%mod<<" ";
	return 0;
}
时间复杂度 Θ(n+logk)\Theta(n + \log k)

Ending

本题考查的数学知识为期望的概念,即每种情况的概率乘上答案然后求和,推导出线性的递推关系,通过发现总威力守恒简化式子。希望大家能通过此题和题解更好地掌握期望相关题目。
还有(最重要的):十年 OI 一场空,不开【】见祖宗!!

评论

1 条评论,欢迎与作者交流。

正在加载评论...