COGS 1224. [SHOI2002]百事世界杯之旅(期望概率)
Posted 神犇(shenben)
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了COGS 1224. [SHOI2002]百事世界杯之旅(期望概率)相关的知识,希望对你有一定的参考价值。
COGS 1224. [SHOI2002]百事世界杯之旅
★ 输入文件:pepsi.in
输出文件:pepsi.out
简单对比时间限制:1 s 内存限制:128 MB
【问题描述】
“……在2002年6月之前购买的百事任何饮料的瓶盖上都会有一个百事球星的名字。只要凑齐所有百事球星的名字,就可参加百事世界杯之旅的抽奖活动,获得球星背包,随声听,更克赴日韩观看世界杯。还不赶快行动!”
你关上电视,心想:假设有n个不同的球星名字,每个名字出现的概率相同,平均需要买几瓶饮料才能凑齐所有的名字呢?
【输入】
整数n(2≤n≤33),表示不同球星名字的个数。
【输出】
输出凑齐所有的名字平均需要买的饮料瓶数。如果是一个整数,则直接输出,否则应该直接按照分数格式输出,例如五又二十分之三应该输出为:
3
5--
20
第一行是分数部分的分子,第二行首先是整数部分,然后是由减号组成的分数线,第三行是分母。减号的个数应等于分母的为数。分子和分母的首位都与第一个减号对齐。
分数必须是不可约的。
【样例】
Pepsi.in
2
pepsi.out
3
ans=Σ(n/i)
#include<cmath> #include<cstdio> #include<algorithm> #include<iostream> using namespace std; typedef long long ll; ll n,p,q,r,sz1,sz2; ll gcd(ll a,ll b){ return !b?a:gcd(b,a%b); } int main(){ freopen("pepsi.in","r",stdin); freopen("pepsi.out","w",stdout); scanf("%lld",&n); p=0;q=1; for(ll i=1;i<=n;i++){ p=p*i+q*n; q*=i; r=__gcd(p,q); if(r==1) continue; p/=r; q/=r; } r=p/q;p%=q; if(!p) printf("%lld\n",r); else{ sz1=floor(log10(r)); sz2=floor(log10(q)); for(ll i=sz1;~i;i--) putchar(‘ ‘);printf("%lld\n",p); printf("%lld",r);for(ll i=sz2;~i;i--) putchar(‘-‘);putchar(‘\n‘); for(ll i=sz1;~i;i--) putchar(‘ ‘);printf("%lld\n",q); } return 0; }
以上是关于COGS 1224. [SHOI2002]百事世界杯之旅(期望概率)的主要内容,如果未能解决你的问题,请参考以下文章