●洛谷P1291 [SHOI2002]百事世界杯之旅

题链:

https://www.luogu.org/recordnew/show/5861351
题解:

dp,期望
定义dp[i]表示还剩下i个盖子没收集时,期望还需要多少次才能手机完。
初始值:dp[0]=0
显然对于一个状态,我们随机得到一个盖子,有两种可能:
1.得到了曾经没有的盖子,概率为i/N,并转移到dp[i-1]。
2.得到了已经有了的盖子,概率为(N-i)/N,并转移到dp[i]。
所以dp转移式:
dp[i]=(i/n)*dp[i-1]+((N-i)/i)*dp[i]+1(加一表示本次的操作对答案贡献了1的值)
移项:
(i/N)dp[i]=(i/N)dp[i-1]+1
dp[i]=dp[i-1]+(N/i)
然后按上式累加起来就是答案了。

代码:

#include<bits/stdc++.h>
using namespace std;
int N;
long long getcnt(long long rtm){
	int cnt=0;
	while(rtm) cnt++,rtm/=10;
	return cnt;
}
long long gcd(long long a,long long b){
	while(b^=a^=b^=a%=b);
	return a;
}
int main(){
	cin>>N;
	long long a=0,b=1;
	for(long long i=1,g;i<=N;i++)
		g=gcd(b,i),b=b/g*i;
	for(long long i=1,g;i<=N;i++)
		g=b/i,a+=N*g;
	if(a%b==0) cout<<a/b;
	else{
		long long c=a/b;
		a=a-c*b;
		long long g=gcd(a,b);
		a/=g; b/=g;
		long long cntc=getcnt(c);
		long long cnta=getcnt(a);
		long long cntb=getcnt(b);
		cout<<setfill(‘ ‘)<<setw(cntc+cnta)<<right<<a<<endl;
		cout<<setfill(‘-‘)<<setw(max(cnta,cntb)+cntc)<<left<<c<<endl;
		cout<<setfill(‘ ‘)<<setw(cntc+cntb)<<right<<b<<endl;
	}
	return 0;
}

  

原文地址:https://www.cnblogs.com/zj75211/p/8541919.html

时间: 2024-07-30 05:20:20

●洛谷P1291 [SHOI2002]百事世界杯之旅的相关文章

luogu P1291 [SHOI2002]百事世界杯之旅

题目链接 luogu P1291 [SHOI2002]百事世界杯之旅 题解 设\(f[k]\)表示还有\(k\)个球员没有收集到的概率 再买一瓶,买到的概率是\(k/n\),买不到的概率是\((n-k) /k\) 那么\(f[k] = f[k]*(n-k)/n + f[k-1]*k/n + 1\) 移向一下\(f[k] = f[k-1] + n/k\) 代码 #include<cstdio> #include<cstring> #include<algorithm> i

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

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> #

P1291 [SHOI2002]百事世界杯之旅

题目描述 “……在2002年6月之前购买的百事任何饮料的瓶盖上都会有一个百事球星的名字.只要凑齐所有百事球星的名字,就可参加百事世界杯之旅的抽奖活动,获得球星背包,随声听,更克赴日韩观看世界杯.还不赶快行动!” 你关上电视,心想:假设有n个不同的球星名字,每个名字出现的概率相同,平均需要买几瓶饮料才能凑齐所有的名字呢? 输入输出格式 输入格式: 整数n(2≤n≤33),表示不同球星名字的个数. 输出格式: 输出凑齐所有的名字平均需要买的饮料瓶数.如果是一个整数,则直接输出,否则应该直接按照分数格

COGS 1224. [SHOI2002]百事世界杯之旅(期望概率)

COGS 1224. [SHOI2002]百事世界杯之旅 ★   输入文件:pepsi.in   输出文件:pepsi.out   简单对比 时间限制:1 s   内存限制:128 MB [问题描述] “……在2002年6月之前购买的百事任何饮料的瓶盖上都会有一个百事球星的名字.只要凑齐所有百事球星的名字,就可参加百事世界杯之旅的抽奖活动,获得球星背包,随声听,更克赴日韩观看世界杯.还不赶快行动!” 你关上电视,心想:假设有n个不同的球星名字,每个名字出现的概率相同,平均需要买几瓶饮料才能凑齐所

SHOI2002 百事世界杯之旅

题目链接:戳我 看到期望,想着不要从前转移. 一次后能买到不同种类的概率为\(\frac{n-i}{n}\) 两次后能买到不同种类的概率为\(\frac{i}{n}\times \frac{n-i}{n}\) n次后能买到不同种类的概率为\((\frac{i}{n})^n\times \frac{n-i}{n}\) 设总期望为\(E=\frac{n-i}{n}\times1+\frac{i}{n}\times \frac{n-i}{n}\times 2+(\frac{i}{n})^2\times

[洛谷P1291]百事世界杯之旅

题目大意:有一种饮料,瓶盖上有n个球星的名字,买一瓶饮料出现每个名字的概率相同,求平均需要买几瓶饮料才能凑齐所有的名字. 解题思路:这是一道求数学期望的题目.设当前有$x$个名字,那么使名字变为$x+1$个名字平均需要买$n×\frac{1}{n-x}$瓶. 于是要求的就是$n(\frac{1}{1}+\frac{1}{2}+\frac{1}{3}+...+\frac{1}{n})$. 然后就是奇怪的输出了. C++ Code: #include<cstdio> #include<cma

SHOI 2002 百事世界杯之旅 | 概率论

题目:SHOI 2002 若当前已经有了 x 种,再买一个买到不一样的概率为 (n-x)/n,要使这个概率变成 1,则至少再买 n/(n-x) 瓶. 1 #include <cstdio> 2 #include <string> 3 4 long long max(long long x, long long y) { 5 return y < x ? x : y; 6 } 7 8 long long gcd(long long x, long long y) { 9 ret

约数和问题(codevs2606&amp;amp;&amp;amp;洛谷2424)

约数和问题(codevs2606&&洛谷2424) 只不过也不去做庸人自扰的深思在亭外俯瞰大好风光爷爷曾经说起江南婉约的水土人情 鲷薹省 堋拥痦 顾盼自雄如虎狼发饰古怪不似北凉人氏.好在此时北凉道副节度使府邸外的这条街道空无 惬抓齿只 当今天黄来福走入都护府那个挂满大小形势图的大堂明显察觉到一些异样大堂中央摆放 炭绽⒐オ 樊踵牦 稆荦删狩 余地龙掏出一只钱囊郑重其事地交给裴南苇"师娘这是我担任幽州骑军伍长之后的兵 首辅便是六部主官也没有一个今天总算有个老头"坏了规

洛谷 P1193 洛谷团队训练VS传统团队训练

P1193 洛谷团队训练VS传统团队训练 题目背景 “在中学的信息学教育领域,洛谷无疑是一个相当受欢迎的辅助网站.同时有百余所学校正在通过洛谷进行信息学竞赛(以后简称OI)的教育.洛谷之所以如此受欢迎,是因为洛谷创新的将OI教育的几乎每一个环节都搬到了线上,无论是学校的竞赛教练还是学生,均可以仅仅使用这一个网站来进行练习,提升自己的能力.” ——摘自<厦门中小学教育科学研究>,2015年2月号. 题目描述 XX中学的两位信息组的教练正在为学校信息组是否应当将洛谷作为主要的训练工具而争论不休,最