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;
}

本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。

浙公网安备 33010602011771号