码迷,mamicode.com
首页 > 其他好文 > 详细

P1291 [SHOI2002]百事世界杯之旅(概率)

时间:2018-10-16 18:41:36      阅读:147      评论:0      收藏:0      [点我收藏+]

标签:using   cstring   计算   string   main   p12   color   char   表示   

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)=n\sum_{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\n",p); if(g) printf("%lld",g); for(re int i=wid(q);i>=1;--i) putchar(-); putchar(\n); for(re int i=wid(g);i>=1;--i) putchar( ); printf("%lld",q); }return 0; }

 

P1291 [SHOI2002]百事世界杯之旅(概率)

标签:using   cstring   计算   string   main   p12   color   char   表示   

原文地址:https://www.cnblogs.com/kafuuchino/p/9799572.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!