首页 > 代码库 > COGS 1224. [SHOI2002]百事世界杯之旅(期望概率)
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]百事世界杯之旅(期望概率)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。