【题解】

一开始看着题觉得是二分答案(最大值的最小值),后来发现不满足单调性

再后来发现可以用贪心做:只需把大臣按照左手*右手升序排序即可

证明:

很显然前面的大臣位置随便调换对后面的大臣并没有影响

那么假设现在已经排了i-1个大臣,p=a[1]*a[2]*a[3]*……*a[i-1];

第i个大臣的钱w[i]=p/b[i],第i+1个大臣的钱w[i+1]=p*a[i]/b[i+1]

若i+1大臣在i大臣前面

第i个大臣的钱w[i]=p*a[i+1]/b[i],第i+1个大臣的钱w[i+1]=p/b[i+1]

显然p*a[i+1]/b[i]>p/b[i]  &&  p*a[i]/b[i+1]>p/b[i+1]

所以两个里面的最大值在p*a[i+1]/b[i] 和 p*a[i]/b[i+1] 之间

若p*a[i+1]/b[i] > p*a[i]/b[i+1](这样就是i+1大臣排在i后面最大值会更小) 则 a[i+1]*b[i+1]>a[i]*b[i]

所以如果要让大臣得到的钱的最大值最小就要保证两个相邻的大臣,前面的左手*右手<后面的左手*右手

(一年前打的题目,现在写题解还要写好久,果然我还是太菜了)

详见代码(记得打高精度,还有interesting的高精除法噢233)

#include <algorithm>
#include <iostream>
#include <ctime>
#include <cmath>
#include <cstdio>
#include <cstdlib>
#include <map>
#include <cstring>
#include <string>
using namespace std;struct info{int l,r,k;}num[1001];inline bool cmp(const info &a,const info &b){return a.k<b.k;}
int f[20000];
int i,j,k,l,m,n,t;int main(){scanf("%d",&n);for(i=0;i<=n;i++){scanf("%d%d",&num[i].l,&num[i].r);num[i].k=num[i].r*num[i].l;}sort(num+1,num+n+1,cmp);f[1]=num[0].l;f[0]=1;for (int i=1;i<=n-1;i++){t=0;for (int j=1;j<=f[0];j++){f[j]*=num[i].l;f[j]+=t; t=f[j]/10000;f[j]%=10000;}if (t>0) f[++f[0]]=t; }t=0;for (int i=f[0];i>=1;i--){t+=f[i];f[i]=t/num[n].r;t%=num[n].r;t*=10000;}  for (;f[f[0]]==0 && f[0]>0;f[0]--);if (f[f[0]]==0) printf("1");else printf("%d",f[f[0]]);for (int i=f[0]-1;i>=1;i--){if (f[i]<10) printf("000");if (f[i]<100 && f[i]>=10) printf("00");if (f[i]<1000 && f[i]>=100) printf("0");printf("%d",f[i]);}
}

NOIP2012【国王游戏】相关推荐

  1. NOIP2012 国王游戏

    2国王游戏 (game.cpp/c/pas) [问题描述] 恰逢 H 国国庆,国王邀请 n 位大臣来玩一个有奖游戏.首先,他让每个大臣在左.右手上面分别写下一个整数,国王自己也在左.右手上各写一个整数 ...

  2. NOIP2012 国王游戏 题解

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

  3. LiberOJ - 2603. 「NOIP2012」国王游戏

    LiberOJ - 2603. 「NOIP2012」国王游戏 算法 (贪心) O ( n 2 ) O(n^2) O(n2) 我们先给出做法,再证明其正确性. 做法:直接将所有大臣按左右手上的数的乘积从 ...

  4. 国王游戏 [NOIP2012 提高组]

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

  5. 【题解】P1080 国王游戏(贪心+高精python天下第一)

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

  6. 【贪心】国王游戏(ybtoj 贪心-1-4)

    国王游戏 ybtoj 贪心-1-4 题目大意 有一个国王和n个大臣 每人左右手分别有一个数,现在然你对大臣们排列(国王在第一个) 每个大臣所得金币是前面的人左手上的数的积除以他右手上的数 现在问你获得 ...

  7. # 国王游戏(贪心+大数乘除+微扰法证明)

    国王游戏(贪心+大数乘除+微扰法证明) 题意:n个大臣和一个国王,左右手都有一个数,排队,国王始终拍在最前面,每个大臣的奖励为这个大臣前面的人的左手上的数之积除以这个大臣右手上的数.构造最优队伍,使得 ...

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

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

  9. 蓝桥云题库之国王游戏——Python满分解答

    国王游戏 题目描述 输入描述 输出描述 输入输出样例 示例输入 示例输出 解题思路 从推测开始 尝试优化排序方法 整理思路 代码实现 题目描述 恰逢 H 国国庆,国王邀请 n 位大臣来玩一个有奖游戏. ...

  10. 贪心算法——国王游戏

    题目描述 孙悟空给花果山的小猴子们分桃子. 首先,他让每只小猴在左.右手上面分别写下一个整数,悟空自己也在左.右手上各写一个整数. 然后,让这 n 只小猴排成一排,悟空站在队伍的最前面. 排好队后,所 ...

最新文章

  1. 【转】NuGet.org 无法访问的解决方法
  2. 71 说出常用的类、包、接口各5个
  3. 实验三 类的继承和多态性
  4. Vue computed参数与各生命周期关系(主要是异步的时候)
  5. 行程日志2010-03-16沙井一村(1)
  6. python什么是数据结构_Python中最有效的图形数据结构是什么?
  7. 计算机程序C语言若初始数为48,2016年计算机软考程序员模拟选择试题
  8. 我的JDBC通用DAO(续)
  9. mysql数据库置疑_SQL数据库置疑 823 824 错误修复 无法附加处理
  10. 视频录制软件哪个好,推荐几款简单实用的视频课件录制软件
  11. 超全!最新互联网大厂的薪资和职级一览
  12. 昆明二级计算机考试报名时间2015,2015年国家司法考试昆明考区公告
  13. Python获取拉勾网招聘信息(可视化展示)
  14. 学计算机c语言吗,学习C语言对学习计算机很重吗?
  15. 打破数据围墙 加速金融创新
  16. 《调研报告》:黑灰产哄抢消费券的两种方式
  17. 视频截帧:javacv实现视频截帧功能
  18. 情绪识别软件?论程序员对猫的偏爱!
  19. yum不能使用了,怎么办?记下来!!!
  20. 阿龙的学习笔记---《程序员自我修养-链接、装载与库》读书笔记(三)

热门文章

  1. python 实现打电话_python 实现手机自动拨打电话的方法(通话压力测试)
  2. 《Linux就该这么学》
  3. ROS Dashing源码编译和安装
  4. 《考 研 后 悔 行 为 大 赏 》
  5. 100种思维模型之递弱代偿原理思维模型-95
  6. 杜比ac3专利已于2017年3月到期
  7. C语言——生产者消费者问题
  8. c语言错误302,c - 编译错误:程序中出现杂散“ \\ 302”等 - 堆栈内存溢出
  9. 思科模拟器-实验3:单交换机VLAN配置和结果验证
  10. 使用机器学习算法实现单细胞测序数据的降维和聚类(二)