洛谷P1080 国王游戏
题目描述
恰逢 H 国国庆,国王邀请 n 位大臣来玩一个有奖游戏。首先,他让每个大臣在左、右手上面分别写下一个整数,国王自己也在左、右手上各写一个整数。然后,让这 n 位大臣排成一排,国王站在队伍的最前面。排好队后,所有的大臣都会获得国王奖赏的若干金币,每位大臣获得的金币数分别是:排在该大臣前面的所有人的左手上的数的乘积除以他自己右手上的数,然后向下取整得到的结果。
国王不希望某一个大臣获得特别多的奖赏,所以他想请你帮他重新安排一下队伍的顺序,使得获得奖赏最多的大臣,所获奖赏尽可能的少。注意,国王的位置始终在队伍的最前面。
输入输出格式
输入格式:
第一行包含一个整数 n,表示大臣的人数。
第二行包含两个整数 a和 b,之间用一个空格隔开,分别表示国王左手和右手上的整数。
接下来 n 行,每行包含两个整数 a 和 b,之间用一个空格隔开,分别表示每个大臣左手和右手上的整数。
输出格式:
输出只有一行,包含一个整数,表示重新排列后的队伍中获奖赏最多的大臣所获得的金币数。
输入输出样例
3 1 1 2 3 7 4 4 6
2
说明
【输入输出样例说明】
按 1、2、3 号大臣这样排列队伍,获得奖赏最多的大臣所获得金币数为 2;
按 1、3、2 这样排列队伍,获得奖赏最多的大臣所获得金币数为 2;
按 2、1、3 这样排列队伍,获得奖赏最多的大臣所获得金币数为 2;
按 2、3、1 这样排列队伍,获得奖赏最多的大臣所获得金币数为 9;
按 3、1、2 这样排列队伍,获得奖赏最多的大臣所获得金币数为 2;
按 3、2、1 这样排列队伍,获得奖赏最多的大臣所获得金币数为 9。
因此,奖赏最多的大臣最少获得 2 个金币,答案输出 2。
【数据范围】
对于 20%的数据,有 1≤ n≤ 10,0 < a、b < 8;
对于 40%的数据,有 1≤ n≤20,0 < a、b < 8;
对于 60%的数据,有 1≤ n≤100;
对于 60%的数据,保证答案不超过 10^9;
对于 100%的数据,有 1 ≤ n ≤1,000,0 < a、b < 10000。
NOIP 2012 提高组 第一天 第二题
思路:
首先是个贪心,左右手数的乘积大的在后边。
然后去模拟,但是注意左手的乘积可能很大(一千个一万相乘,大约是10^4000)
#include<iostream> #include<cstdio> #include<queue> #include<cstring> #include<algorithm> #include<cmath> #include<ctime> using namespace std; int n; int A,B; struct node{int a,b;int t; }Q[1019]; bool cmp(node x,node y) { return x.t<y.t; } int main() {freopen("game.in","r",stdin);freopen("game.out","w",stdout);scanf("%d",&n);scanf("%d%d",&A,&B);for(int i=1;i<=n;i++){scanf("%d%d",&Q[i].a,&Q[i].b);Q[i].t=Q[i].a*Q[i].b;}long long tot=1,t,maxn=0;tot=A;maxn=0;sort(Q+1,Q+n+1,cmp);for(int j=1;j<=n;j++){t=tot/Q[j].b;tot*=Q[j].a;maxn=max(maxn,t);}cout<<maxn;return 0; }
裸的贪心60
#include<iostream> #include<cstdio> #include<queue> #include<cstring> #include<algorithm> #include<cmath> using namespace std; int A,B,n; struct node{int x,y; }a[1010]; bool cmp(node a,node b) { return a.x*a.y < b.x*b.y;} int sum[1010],ans[1010],ls,p[1010],lp; int m,P; bool Max() {int i=1,j=1;while(p[i]==0&&i<=lp) i++;while(ans[j]==0&&j<=ls) j++;if(lp-i+1>ls-j+1) return 0;if(lp-i+1<ls-j+1) return 1;while(i<=lp&&j<=ls){if(p[i]<ans[j]) return 1;if(p[i]>ans[j]) return 0;j++,i++;}return 0; } void ch(int x) {for(int i=1;i<=m;i++)sum[i]*=a[x].x;for(int i=1;i<=m;i++){sum[i+1]+=sum[i]/10000;sum[i]%=10000;}if(sum[m+1]) m++; } void div(int d) {memset(ans,0,sizeof ans);ls=1;P=0;bool flag=0;while(m>0&&sum[m]==0) m--;for(int i=m;i>=1;i--){P=P*10000+sum[i];ans[++ls]=P/a[d].y;if(ans[ls]==0&&(!flag))ls--;else flag=1;P%=a[d].y;} } int main() {scanf("%d%d%d",&n,&A,&B);for(int i=1;i<=n;i++)scanf("%d%d",&a[i].x,&a[i].y);sum[1]=A;m=1;sort(a+1,a+1+n,cmp);for(int i=1;i<=n;i++){div(i);if(Max()){lp=ls;memcpy(p,ans,sizeof ans); }ch(i);}int i=0;while(i<=lp&&p[i]==0) i++;printf("%d",p[i]);i++;while(i<=lp){printf("%04d",p[i]);i++;}return 0; }
高精代码100
转载于:https://www.cnblogs.com/CLGYPYJ/p/7692178.html
洛谷P1080 国王游戏相关推荐
- 洛谷 P1080 国王游戏
这是一道贪心题,贪心的策略是将大臣们按左右手金币的乘积升序排列,具体证明过程可以参见洛谷大佬的题解,这里就不再赘述了. 因为本菜鸡之前没有接触过高精度运算,对C++的运算符重载也不太熟练,所以正好借此 ...
- 洛谷P1080 国王游戏(贪心)
国王游戏 题目描述 恰逢 HHH 国国庆,国王邀请 nnn 位大臣来玩一个有奖游戏.首先,他让每个大臣在左.右手上面分别写下一个整数,国王自己也在左.右手上各写一个整数.然后,让这 nnn 位大臣排成 ...
- 洛谷P1080 国王游戏 贪心+高精度
https://www.luogu.org/problem/P1080 题目描述 恰逢 HH H国国庆,国王邀请n nn 位大臣来玩一个有奖游戏.首先,他让每个大臣在左.右手上面分别写下一个整数,国王 ...
- [NOIP2012] 提高组 洛谷P1080 国王游戏
题目描述 恰逢 H 国国庆,国王邀请 n 位大臣来玩一个有奖游戏.首先,他让每个大臣在左.右 手上面分别写下一个整数,国王自己也在左.右手上各写一个整数.然后,让这 n 位大臣排 成一排,国王站在队伍 ...
- NOIP 提高组 2012 / 洛谷P1080 国王游戏 题解
题面: 略 简易题解: 假设第iii位大臣左手为LiL_{i}Li, 右手的数为R_{i} 并且我们有两位大臣iii,jjj,考虑他们的相对位置 (PPP 是 iii , jjj 之前的左手数值累乘 ...
- 做题记(4)P1080 国王游戏
今天,做了洛谷上的P1080 国王游戏,题目如下: 题目描述 恰逢 H 国国庆,国王邀请 n 位大臣来玩一个有奖游戏.首先,他让每个大臣在左.右手上面分别写下一个整数,国王自己也在左.右手上各写一个整 ...
- 【题解】P1080 国王游戏(贪心+高精python天下第一)
P1080 国王游戏 题目描述 恰逢 H国国庆,国王邀请n 位大臣来玩一个有奖游戏.首先,他让每个大臣在左.右手上面分别写下一个整数,国王自己也在左.右手上各写一个整数.然后,让这 n 位大臣排成一排 ...
- 洛谷 P2197 nim游戏
洛谷 P2197 nim游戏 题目描述 甲,乙两个人玩Nim取石子游戏. nim游戏的规则是这样的:地上有n堆石子(每堆石子数量小于10000),每人每次可从任意一堆石子里取出任意多枚石子扔掉,可以取 ...
- 洛谷 P1558 色板游戏
传送门:洛谷 P1558 色板游戏 算法分析:观察到数据范围:\(1\leq T\leq 30\) ,考虑使用二进制来进行状态压缩 将颜色\(x\)表示为 \(1<<(x-1)\) 即 \ ...
最新文章
- 再获“国资”加持,车置宝获南京银行2亿债权融资支持...
- 2021年东港二中高考成绩查询,辽宁省东港二中2021届英语高考模拟试卷1(新课改原创2020版,供2021年课改省份考生使用)...
- Flash网站流量统计的方法
- unity中怎么在InspectorI面板加LOGO
- 前端学习(1902)vue之电商管理系统电商系统之渲实现添加用户前的预先校验
- Linux格式化异常,Linux下DateFormat的parse方法出现”ParseException”异常
- 医生的小助手,医疗AI赋能诊断新冠肺炎新方案!
- 谷歌排名第一的编程语言,收下这份资料,小白也能学的会!
- 作者:王倩(1983-),女,上海计算机软件技术开发中心工程师。
- squid是否支持http1.1和对KeepAlive支持的个人理解
- 两个子线程不冲突_多线程操作可见性
- python绘制心形图像
- Linux下解决无法远程连接数据库问题
- 日志分隔工具Cronolog
- 高分GF与环境HJ系列国产卫星遥感影像数据图像免费批量下载方法
- dvm 与 jvm区别
- NOIP2018提高组省一冲奖班模测训练(一)
- 实现一周之内自动登录的 cookie和session还有localStorage的存储机制
- 数字化时代-15:从商品交换过程解剖淘宝电商
- GDAL / OGR 学习手册 [02] :栅格数据读取
热门文章
- JQuery:JQuery遍历详解
- Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)
- nginx +php-fpm 发挥更大的php作用
- js new Date()
- ruby中的特殊字符
- python eval 字符串替换_Python中eval妙用,字符串转字典和列表
- 测量仪图片_介绍一款电线电缆检测智能影像测量仪
- java高级之注解详解
- linux鼠标回到桌面图标,Ubuntu16_18建立返回桌面、显示桌面的快捷图标的特殊方法...
- mysql 实施索引_MySQL 索引实现