P1291 [SHOI2002]百事世界杯之旅(概率)
Posted kafuuchino
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了P1291 [SHOI2002]百事世界杯之旅(概率)相关的知识,希望对你有一定的参考价值。
设$f(n,k)$表示共n个名字,剩下k个名字未收集到,还需购买饮料的平均次数
则有:
$f(n,k)=frac{n-k}{n}*f(n,k) + frac{k}{n}*f(n,k+1) +1$
移项整理,可得:
$f(n,k)=f(n,k+1)+frac{n}{k}$
根据递推式,可得:
$f(n,0)=nsum_{k=1}^{n}frac{1}{k}$
蓝后gcd搞搞约分
注意输出
end.
#include<iostream> #include<cstdio> #include<cstring> #define re register using namespace std; typedef long long ll; ll p,q=1,g; int n; ll gcd(ll a,ll b){return b?gcd(b,a%b):a;} int wid(ll x){//计算位数 int res=0; for(;x;x/=10)++res; return res; } int main(){ scanf("%d",&n); for(re int i=1;i<=n;++i){ p=p*i+q*n; q*=i; g=gcd(p,q); p/=g,q/=g; }g=p/q,p%=q;
//分多种情况输出 if(!p) printf("%lld",g); else{ for(re int i=wid(g);i>=1;--i) putchar(‘ ‘); printf("%lld ",p); if(g) printf("%lld",g); for(re int i=wid(q);i>=1;--i) putchar(‘-‘); putchar(‘ ‘); for(re int i=wid(g);i>=1;--i) putchar(‘ ‘); printf("%lld",q); }return 0; }
以上是关于P1291 [SHOI2002]百事世界杯之旅(概率)的主要内容,如果未能解决你的问题,请参考以下文章