AGC032F - One Third 题解

题目链接:F - One Third

题目大意:洛谷


题解:这是什么神仙题目……题解不知道咋写了……大概是拿定积分推一推式子最后的出来答案是 \(\frac{1}{n}\sum_{i=1}^{n}\frac{1}{3^i\times (n-i+1)}\) ,但是我定积分都不会……

大概可以感性理解一下,枚举最小的是 k 小值,然后我们得到概率是 \(\frac{2}{3^i}\) ,然后 k 小值的期望是 \(\frac{1}{2n(n-i+1)}\cdot \frac{1}{n}\) ,然后答案就是这个东西。

代码:

#include <cstdio>
int quick_power(int a,int b,int Mod){
	int ans=1;
	while(b){
		if(b&1){
			ans=1ll*ans*a%Mod;
		}
		b>>=1;
		a=1ll*a*a%Mod;
	}
	return ans;
}
const int Maxn=1000000;
const int Mod=1000000007;
const int inv_3=(Mod+1)/3;
int n;
int pow_3i[Maxn+5];
int inv[Maxn+5];
void init(){
	pow_3i[0]=1;
	for(int i=1;i<=Maxn;i++){
		pow_3i[i]=1ll*pow_3i[i-1]*inv_3%Mod;
	}
	inv[1]=1;
	for(int i=2;i<=Maxn;i++){
		inv[i]=1ll*(Mod-Mod/i)*inv[Mod%i]%Mod;
	}
}
int main(){
	init();
	scanf("%d",&n);
	int ans=0;
	for(int i=1;i<=n;i++){
		ans=(ans+1ll*pow_3i[i]*inv[n-i+1])%Mod;
	}
	ans=1ll*ans*inv[n]%Mod;
	printf("%d\n",ans);
	return 0;
}
posted @ 2020-09-23 23:07  with_hope  阅读(143)  评论(0)    收藏  举报