题目描述

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

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

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

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

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

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

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

输入输出格式

输入格式:

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

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

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

和右手上的整数。

输出格式:

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

金币数。

输入输出样例

输入样例#1:

  1. 3
  2. 1 1
  3. 2 3
  4. 7 4
  5. 4 6
输出样例#1:

  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=,f=;char ch=getchar();
  10. while(ch<'' || ch>''){if(ch=='-')f=-;ch=getchar();}
  11. while(ch>='' && ch<=''){x=x*+ch-'';ch=getchar();}
  12. return x*f;
  13. }
  14. struct HN{
  15. int a[];
  16. int len;
  17. }num,c,ans;
  18. bool cmp(HN a,HN b){
  19. if(a.len<b.len)return ;
  20. for(int i=a.len;i;--i){
  21. if(a.a[i]<b.a[i])return ;
  22. if(a.a[i]>b.a[i])return ;
  23. }
  24. return ;
  25. }
  26. void N_mul(int x){
  27. HN t;t.len=num.len+;
  28. memset(t.a,,sizeof t.a);
  29. for(int i=;i<=num.len;i++){
  30. t.a[i]+=num.a[i]*x;
  31. t.a[i+]=t.a[i]/;
  32. t.a[i]%=;
  33. }
  34. // num.len+=10;
  35. while(t.a[t.len]== && t.len>) t.len--;
  36. num=t;
  37. return;
  38. }
  39. void N_div(int x){
  40. memset(c.a,,sizeof c.a);
  41. int tmp=;
  42. c.len=;
  43. for(int i=num.len;i;i--){
  44. tmp=*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-;i>;--i){
  56. printf("%d",num.a[i]/);
  57. printf("%d",num.a[i]/%);
  58. printf("%d",num.a[i]/%);
  59. printf("%d",num.a[i]%);
  60. }
  61. printf("\n");
  62. return;
  63. }
  64. //
  65. struct node{
  66. int a,b;
  67. int c;
  68. }m[];
  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-);
  80. qsort(i+,r);
  81. }
  82. return;
  83. }
  84. int n;
  85. int main(){
  86. n=read();
  87. scanf("%d",&num.a[]);
  88. scanf("%d",&num.len);
  89. num.len=;
  90. int i,j;
  91. for(i=;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(,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=;
  100. ans.a[]=;
  101. for(i=;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 ;
  111. }

[NOIP2012] 提高组 洛谷P1080 国王游戏的更多相关文章

  1. 【流水调度问题】【邻项交换对比】【Johnson法则】洛谷P1080国王游戏/P1248加工生产调度/P2123皇后游戏/P1541爬山

    前提说明,因为我比较菜,关于理论性的证明大部分是搬来其他大佬的,相应地方有注明. 我自己写的部分换颜色来便于区分. 邻项交换对比是求一定条件下的最优排序的思想(个人理解).这部分最近做了一些题,就一起 ...

  2. 【题解】洛谷 P1080 国王游戏

    目录 题目 思路 \(Code\) 题目 P1080 国王游戏 思路 贪心+高精度.按\(a \times b\)从小到大排序就可以了. \(Code\) #include<bits/stdc+ ...

  3. 洛谷 P1080 国王游戏

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

  4. 洛谷—— P1080 国王游戏

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

  5. 洛谷P1080 国王游戏 python解法 - 高精 贪心 排序

    洛谷的题目实在是裹脚布 还编的像童话 这题要 "使得获得奖赏最多的大臣,所获奖赏尽可能的少." 看了半天都觉得不像人话 总算理解后 简单说题目的意思就是 根据既定的运算规则 如何排 ...

  6. [NOIP2012] 提高组 洛谷P1081 开车旅行

    题目描述 小 A 和小 B 决定利用假期外出旅行,他们将想去的城市从 1 到 N 编号,且编号较小的 城市在编号较大的城市的西边,已知各个城市的海拔高度互不相同,记城市 i 的海拔高度为 Hi,城市 ...

  7. [NOIP2011] 提高组 洛谷P1312 Mayan游戏

    题目描述 Mayan puzzle是最近流行起来的一个游戏.游戏界面是一个 7 行5 列的棋盘,上面堆放着一些方块,方块不能悬空堆放,即方块必须放在最下面一行,或者放在其他方块之上.游戏通关是指在规定 ...

  8. [NOIP2012] 提高组 洛谷P1084 疫情控制

    题目描述 H 国有 n 个城市,这 n 个城市用 n-1 条双向道路相互连通构成一棵树,1 号城市是首都, 也是树中的根节点. H 国的首都爆发了一种危害性极高的传染病.当局为了控制疫情,不让疫情扩散 ...

  9. [NOIP2012] 提高组 洛谷P1083 借教室

    题目描述 在大学期间,经常需要租借教室.大到院系举办活动,小到学习小组自习讨论,都需要向学校申请借教室.教室的大小功能不同,借教室人的身份不同,借教室的手续也不一样. 面对海量租借教室的信息,我们自然 ...

随机推荐

  1. Html5 Egret游戏开发 成语大挑战(七)游戏逻辑和数据处理

    本篇在前面的基础上,将进行逻辑的编码开发让游戏能够正式的玩起来,这里没有注重太多的体验细节,而是直接实现游戏的规则逻辑,将分成两个部分说明:数据处理和游戏逻辑. 初始化游戏数据 在前面的第五篇中,我们 ...

  2. oracle:db-link使用

    二个oracle instance,如果需要在一个instance上,直接查询另一个instance上的数据,就要用到db-link 创建: create public database link 链 ...

  3. <实训|第十天>从底层解释一下U盘内存为什么变小的原因附数据恢复的基本原理

    [root@localhost~]#序言 我们平时不论是买一个U盘硬盘,或者自己在电脑上创建一个分区,大小总是比我们创建的要小一点,有些人会说,这个正常啊,是因为厂家规定的1M=1000k,真正的是1 ...

  4. MVVM小记

    这篇小记源自于codeproject上的一篇文章 http://www.codeproject.com/Articles/100175/Model-View-ViewModel-MVVM-Explai ...

  5. ASP.NET网站入侵第二波(LeaRun.信息化快速开发框架 已被笔者拿下)

    笔者小学文化,语言组织能力差,写的不通的地方请大家将就着看,不喜勿喷. 上篇我讲了如何在上传文件中入侵服务器,這次我们稍微多讲一点. 还是先讲下流程: 1.上传代码页面  我上传的是ashx页面. 2 ...

  6. [poj2484]A Funny Game(对称博弈)

    题目:http://poj.org/problem?id=2484 题意:n个石子围成一个圈,两个人轮流取,每次可以取一个石子或者相邻的两个石子,问先手胜还是后手胜 分析: 典型的对称博弈 如果n&g ...

  7. CSS选择器优先级 CSS权值

    计算指定选择器的优先级:重新认识CSS的权重 标签的权值为 0,0,0,1 类的权值为 0,0,1,0 属性选择的权值为 0,0,1,1  ID的权值为 0,1,0,0 important的权值为最高 ...

  8. 现代软件工程 第七章 【MSF】练习与讨论

    7.7  移山开发方法——比TFS敏捷更精简 几个软件学院的学生来请教阿超,同学们自豪地说,我们要用全套TFS敏捷开发模式开发项目! 真的?阿超不敢相信. 同学: 对!我们要用全5个工作项类型 – 任 ...

  9. 修改placehosder

    CSS美化INPUT placeholder效果.CSS代码美化文本框里的placeholder文字. ::selection伪元素 简而言之:单冒号(:)用于CSS3伪类,双冒号(::)用于CSS3 ...

  10. 【CodeVS 3123】高精度练习之超大整数乘法 &【BZOJ 2197】FFT快速傅立叶

    第一次写法法塔,,,感到威力无穷啊 看了一上午算导就当我看懂了?PS:要是机房里能有个清净的看书环境就好了 FFT主要是用了巧妙的复数单位根,复数单位根在复平面上的对称性使得快速傅立叶变换的时间复杂度 ...