题目描述

恰逢 H 国国庆,国王邀请 n 位大臣来玩一个有奖游戏。首先,他让每个大臣在左、右

手上面分别写下一个整数,国王自己也在左、右手上各写一个整数。然后,让这 n 位大臣排

成一排,国王站在队伍的最前面。排好队后,所有的大臣都会获得国王奖赏的若干金币,每

位大臣获得的金币数分别是:排在该大臣前面的所有人的左手上的数的乘积除以他自己右

手上的数,然后向下取整得到的结果。

国王不希望某一个大臣获得特别多的奖赏,所以他想请你帮他重新安排一下队伍的顺序,

使得获得奖赏最多的大臣,所获奖赏尽可能的少。注意,国王的位置始终在队伍的最前面。

输入输出格式

输入格式:

第一行包含一个整数 n,表示大臣的人数。

第二行包含两个整数 a和 b,之间用一个空格隔开,分别表示国王左手和右手上的整数。

接下来 n 行,每行包含两个整数 a 和 b,之间用一个空格隔开,分别表示每个大臣左手

和右手上的整数。

输出格式:

输出只有一行,包含一个整数,表示重新排列后的队伍中获奖赏最多的大臣所获得的

金币数。

输入输出样例

输入样例#1:

3
1 1
2 3
7 4
4 6 

输出样例#1:

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%的数据,保证答案不超过 109;

对于 100%的数据,有 1 ≤ n ≤1,000,0 < a、b < 10000。

NOIP 2012 提高组 第一天 第二题

经过凭感觉瞎搞大堆复杂的证明和推导,以每个人左手右手的乘积为标准,从小到大排序,然后从左往右乘起来,求在哪个位置可以取得最大值即可。

需要用到高精度。

↑高精度简直恶心,调了好久好久才对。

  1 /*by SilverN*/
  2 #include<iostream>
  3 #include<algorithm>
  4 #include<cstring>
  5 #include<cstdio>
  6 #include<cmath>
  7 using namespace std;
  8 int read(){
  9     int x=0,f=1;char ch=getchar();
 10     while(ch<'0' || ch>'9'){if(ch=='-')f=-1;ch=getchar();}
 11     while(ch>='0' && ch<='9'){x=x*10+ch-'0';ch=getchar();}
 12     return x*f;
 13 }
 14 struct HN{
 15     int a[2400];
 16     int len;
 17 }num,c,ans;
 18 bool cmp(HN a,HN b){
 19     if(a.len<b.len)return 1;
 20     for(int i=a.len;i;--i){
 21         if(a.a[i]<b.a[i])return 1;
 22         if(a.a[i]>b.a[i])return 0;
 23     }
 24     return 0;
 25 }
 26 void N_mul(int x){
 27     HN t;t.len=num.len+10;
 28     memset(t.a,0,sizeof t.a);
 29     for(int i=1;i<=num.len;i++){
 30         t.a[i]+=num.a[i]*x;
 31         t.a[i+1]=t.a[i]/10000;
 32         t.a[i]%=10000;
 33     }
 34 //    num.len+=10;
 35     while(t.a[t.len]==0 && t.len>1) t.len--;
 36     num=t;
 37     return;
 38 }
 39 void N_div(int x){
 40     memset(c.a,0,sizeof c.a);
 41     int tmp=0;
 42     c.len=0;
 43     for(int i=num.len;i;i--){
 44         tmp=10000*tmp+num.a[i];
 45         if(tmp>=x){
 46             if(!c.len) c.len=i;
 47             c.a[i]=tmp/x;
 48             tmp%=x;
 49         }
 50     }
 51     return;
 52 }
 53 void PRI(HN num){
 54     printf("%d",num.a[num.len]);
 55     for(int i=num.len-1;i>0;--i){
 56         printf("%d",num.a[i]/1000);
 57         printf("%d",num.a[i]/100%10);
 58         printf("%d",num.a[i]/10%10);
 59         printf("%d",num.a[i]%10);
 60     }
 61     printf("\n");
 62     return;
 63 }
 64 //
 65 struct node{
 66     int a,b;
 67     int c;
 68 }m[1200];
 69 void qsort(int l,int r){
 70     if(l<r){
 71         int i=l,j=r; node x=m[l];
 72         while(i<j){
 73             while(i<j && m[j].c>=x.c) j--;
 74             m[i]=m[j];
 75             while(i<j && m[i].c<=x.c) i++;
 76             m[j]=m[i];
 77         }
 78         m[i]=x;
 79         qsort(l,i-1);
 80         qsort(i+1,r);
 81     }
 82     return;
 83 }
 84 int n;
 85 int main(){
 86     n=read();
 87     scanf("%d",&num.a[1]);
 88     scanf("%d",&num.len);
 89     num.len=1;
 90     int i,j;
 91     for(i=1;i<=n;i++){
 92         m[i].a=read();
 93         m[i].b=read();
 94         m[i].c=m[i].a*m[i].b;
 95     }
 96     qsort(1,n);
 97 //    for(i=1;i<=n;i++)printf("%d ",m[i].c);printf("\n");
 98 //    for(i=1;i<=n;i++)printf("re:%d %d\n",m[i].a,m[i].b);
 99     ans.len=1;
100     ans.a[1]=0;
101     for(i=1;i<=n;i++){
102         N_div(m[i].b);
103 //        PRI(c);
104         if(cmp(ans,c))ans=c;
105 //        PRI(ans);
106 //        printf("num:");PRI(num);
107         N_mul(m[i].a);
108     }
109     PRI(ans);
110     return 0;
111 }

转载于:https://www.cnblogs.com/SilverNebula/p/6059397.html

[NOIP2012] 提高组 洛谷P1080 国王游戏相关推荐

  1. 洛谷P1080 国王游戏

    题目描述 恰逢 H 国国庆,国王邀请 n 位大臣来玩一个有奖游戏.首先,他让每个大臣在左.右手上面分别写下一个整数,国王自己也在左.右手上各写一个整数.然后,让这 n 位大臣排成一排,国王站在队伍的最 ...

  2. 洛谷 P1080 国王游戏

    这是一道贪心题,贪心的策略是将大臣们按左右手金币的乘积升序排列,具体证明过程可以参见洛谷大佬的题解,这里就不再赘述了. 因为本菜鸡之前没有接触过高精度运算,对C++的运算符重载也不太熟练,所以正好借此 ...

  3. 洛谷P1080 国王游戏(贪心)

    国王游戏 题目描述 恰逢 HHH 国国庆,国王邀请 nnn 位大臣来玩一个有奖游戏.首先,他让每个大臣在左.右手上面分别写下一个整数,国王自己也在左.右手上各写一个整数.然后,让这 nnn 位大臣排成 ...

  4. NOIP 提高组 2012 / 洛谷P1080 国王游戏 题解

    题面: 略 简易题解: 假设第iii位大臣左手为LiL_{i}Li​, 右手的数为R_{i} 并且我们有两位大臣iii,jjj,考虑他们的相对位置 (PPP 是 iii , jjj 之前的左手数值累乘 ...

  5. 洛谷P1080 国王游戏 贪心+高精度

    https://www.luogu.org/problem/P1080 题目描述 恰逢 HH H国国庆,国王邀请n nn 位大臣来玩一个有奖游戏.首先,他让每个大臣在左.右手上面分别写下一个整数,国王 ...

  6. [NOIP2006] 提高组 洛谷P1066 2^k进制数

    题目描述 设r是个2^k 进制数,并满足以下条件: (1)r至少是个2位的2^k 进制数. (2)作为2^k 进制数,除最后一位外,r的每一位严格小于它右边相邻的那一位. (3)将r转换为2进制数q后 ...

  7. [NOIP1999] 提高组 洛谷P1014 Cantor表

    题目描述 现代数学的著名证明之一是Georg Cantor证明了有理数是可枚举的.他是用下面这一张表来证明这一命题的: 1/1 1/2 1/3 1/4 1/5 - 2/1 2/2 2/3 2/4 - ...

  8. [NOIP2005] 提高组 洛谷P1051 谁拿了最多奖学金

    题目描述 某校的惯例是在每学期的期末考试之后发放奖学金.发放的奖学金共有五种,获取的条件各自不同: 1) 院士奖学金,每人8000元,期末平均成绩高于80分(>80),并且在本学期内发表1篇或1 ...

  9. [NOIP2015] 提高组 洛谷P2661 信息传递

    题目描述 有n个同学(编号为1到n)正在玩一个信息传递的游戏.在游戏里每人都有一个固定的信息传递对象,其中,编号为i的同学的信息传递对象是编号为Ti同学. 游戏开始时,每人都只知道自己的生日.之后每一 ...

最新文章

  1. 做行业研究时如何获取相关数据?
  2. 马哥学习笔记——shell变量类型
  3. 图解从 URL 到网页通信原理
  4. java 显示天气的小程序_超级简单的微信小程序获取今日天气预报代码 小程序获取七日天气...
  5. php baocuo error,PHP编译报错configure: error: Cannot find libmysqlclient under /usr.
  6. HTML CSS样式表布局
  7. est.java 2 错误 找不到符号_找不到Cython/Python符号PyString\u Typ
  8. 点赞!这4款你常用的App已上线隐私政策
  9. 移动安全-IOS逆向第三天——实战HOOK RSA/DES加密
  10. oracle分时分段表示,管理信息系统试题及答案三套.doc
  11. java 定义别名_为java类起别名
  12. 最新小月云匿名短信系统源码V2.0+全新UI的
  13. caspase3是什么意思_【求助】cleaved caspase-3, 第一个词怎样翻译好
  14. 大学生电子设计竞赛总结
  15. 【制造业】-供应链数据指标体系最佳实践
  16. 小学数学思维导图模板
  17. 扶桑号战列舰【RMQ+分治】
  18. Image加载二进制数据图片
  19. 【每日早报】2019/05/30
  20. 基于词表的中文分词算法

热门文章

  1. 把一个整形数组中重复的数字去掉 - 微软面试题
  2. regsvr32.exe进程注册dll文件
  3. AndroidStudio_安卓原生开发_自定义服务器Token验证_MD5加密方法---Android原生开发工作笔记156
  4. Element-UI-简单组合效果---Element-UI工作笔记002
  5. Lua开发工作笔记0002---Lua开发语言简介
  6. Netty工作笔记0073---Neety的出站和入站机制
  7. ASP.Net学习笔记008--ASP.Net揭秘之Input版自增补充说明
  8. android学习笔记---使用AsyncTask实现异步处理,内部使用线程加Handler
  9. 随想录(从技术到业务的转变)
  10. dlut-KFQ概率上机1