题目描述

恰逢 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%的数据,保证答案不超过 10^9;

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

NOIP 2012 提高组 第一天 第二题

不想写高精.jpg.

思路很简单,就是把a*b从小到大排序

1.证明:

1)知道,如果相邻的两个人交换位置,只会影响到这两个人的值,不会影响他人

2)假设相邻的两个人i, i + 1。设A[i] B[i] <= A[i + 1] B[i + 1],i之前所有人的左手乘积为S。

则,ans1 = max{S / B[i], S * A[i] / B[i + 1]}

若交换

则,ans2 = max{S / B[i + 1], S * A[i + 1] / B[i]}

因为,A[i] B[i] <= A[i + 1] B[i + 1]

所以,S A[i] / B[i + 1] <= S A[i + 1] / B[i]

又因为,S / B[i + 1] <= S * A[i] / B[i + 1]

所以,ans2 = S * A[i + 1] / B[i]

ans1 = max{S / B[i], S * A[i] / B[i + 1]}

所以,ans1 <= ans2

2.证明:

取 log 变成加法.

其实只与相邻两人的顺序有关.
前后的人他们都影响不了.
推一推式子. 假设有俩人 i,j.
i 在 j 前面的答案是
max{−b i ,a i − b j }
i 在 j 后面的答案是
max{−b j ,a j − b i }

显然 −b j < a i − b j ,−b i < a j − b i .
所以 a i − b j < a j − b i .
所以 a i + b i < a j + b j

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 #include<cmath>
 5 #include<algorithm>
 6 #include<queue>
 7 #define lli long long int
 8 using namespace std;
 9 const lli MAXN=1001;
10 inline void read(lli &n)
11 {
12     char c='+';lli x=0;bool flag=0;
13     while(c<'0'||c>'9'){c=getchar();if(c=='-')flag=1;}
14     while(c>='0'&&c<='9'){x=x*10+(c-48);c=getchar();}
15     flag==1?n=-x:n=x;
16 }
17 struct node
18 {
19     lli a,b;
20     node(){a=0;b=0;}
21 }pep[MAXN];
22 lli comp(const node &a,const node &b)
23 {
24     return (a.a*a.b<b.a*b.b);
25 }
26 lli now=1;
27 lli ans=0;
28 int main()
29 {
30     lli n;
31     read(n);
32     read(pep[1].a);read(pep[1].b);
33     for(lli i=2;i<=n+1;i++){read(pep[i].a);read(pep[i].b);}
34     sort(pep+2,pep+n+2,comp);
35     for(lli i=1;i<=n+1;i++)
36     {
37         ans=max(ans,now/(pep[i].b));
38         now*=pep[i].a;
39     }
40     //printf("%lld",ans);
41     cout<<ans;
42     return 0;
43 }

转载于:https://www.cnblogs.com/zwfymqz/p/7297446.html

P1080 国王游戏相关推荐

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

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

  2. 做题记(4)P1080 国王游戏

    今天,做了洛谷上的P1080 国王游戏,题目如下: 题目描述 恰逢 H 国国庆,国王邀请 n 位大臣来玩一个有奖游戏.首先,他让每个大臣在左.右手上面分别写下一个整数,国王自己也在左.右手上各写一个整 ...

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

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

  4. P1080 国王游戏(贪心+高精度乘除及大数比较)

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

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

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

  6. P1080 国王游戏(贪心+大数乘除)

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

  7. 洛谷P1080 国王游戏

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

  8. [NOIP2012] 提高组 洛谷P1080 国王游戏

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

  9. 洛谷 [NOIP2012 D1T2] P1080 国王游戏

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

最新文章

  1. 干货:Android 源码使用心得分享
  2. 互联网大佬口口声声的人工智能,笑到最后的也许是马云的云计算
  3. 十一好礼,90份新品MCU开发板免费送!
  4. jQuery中FormData的使用
  5. java两个线程交替执行
  6. 广度优先搜索算法BFS讲解以及python 实现
  7. 容斥原理应用(求1~r中有多少个数与n互素)
  8. poj 1733 ParityGame 并查集 离散化
  9. GitHub#algorithm#:《剑指offer》 的50道面试题
  10. Seeing that the girl he likes actually married his third uncle
  11. Linux安装tomcat服务器
  12. 汉字计算机编码是谁发明的,神奇的汉字编码,了解一下
  13. 【ORACLE】关于多态表函数PTF(Polymorphic Table Functions)的使用
  14. Sqlserver2000服务器安装配置
  15. 蜀门一直显示连接服务器,蜀门进不去点进入之后,出现无法连接服务器 – 手机爱问...
  16. C语言大作业指针字符串处理,[C语言-PTA]说反话-加强版 — 字符串的指针式处理 | 祭夜の咖啡馆...
  17. 回顾2021,展望2022,静Yu的万粉成长之路
  18. Java定时任务处理异常空指针,执行定时器报空指针异常
  19. 个人努力是成功的要素?
  20. 麦克斯韦方程组之波动方程的导出

热门文章

  1. java 多态判断非空_Java 多态
  2. echarts tooltip被遮挡_echarts 的tooltip定位到当前图,避免溢出和遮挡
  3. 拟真机器人拯救者怎么来_笔点聊科技 篇九:3499起、卷土重来?理性聊聊刚发布的联想拯救者手机Pro...
  4. bettertouchtool闪退_BetterTouchTool for Mac 3.238 无闪退 触控板增强工具
  5. 让8只数码管初始显示零,每隔大约1s加一显示,到数码管显示9后,再从一开始显示
  6. java script的trim_Javascript中实现trim()函数的两种方法
  7. arthas 查看哪个方法调用最耗时_阿里巴巴问题排查神器Arthas使用实践
  8. python基础(16)之 日期
  9. 【OpenCV 例程200篇】50. 图像增强—直方图统计量图像增强
  10. matlab时域分析论文,基于Matlab语言的数字信号时域相关性研究与分析.doc