题面:

简易题解:

假设第iii位大臣左手为LiL_{i}Li​, 右手的数为R_{i}
并且我们有两位大臣iii,jjj,考虑他们的相对位置

(PPP 是 iii , jjj 之前的左手数值累乘)

某一个时候, 假设iii 在 jjj 前一个位置,则此时:
jjj 号大臣能获得的金币为 P×LiRj\frac{P \times L_{i} } {R_{j}}Rj​P×Li​​
iii 号大臣能获得的金币为 PRi\frac{P}{R_{i}}Ri​P​
所以这两个的最大值为max(P×LiRj,PRi)max( \frac{P \times L_{i}} {R_{j}}, \frac{P}{R_{i}} )max(Rj​P×Li​​,Ri​P​)

iii 与 jjj交换位置,则此时:
iii号大臣能获得的金币为 P×LjRi\frac{P \times L_{j}} {R_{i}}Ri​P×Lj​​
jjj号大臣能获得的金币为 PRj\frac{P}{R_{j}}Rj​P​
所以这两个的最大值为max(P×LjRi,PRj)max( \frac{P \times L_{j}} {R_{i}}, \frac{P}{R_{j}} )max(Ri​P×Lj​​,Rj​P​)

我们来比较一下这两个的最大值:
倘若第一种情况更优,则:
max(P×LjRi,PRj)>max(P×LiRj,PRi)max( \frac{P \times L_{j}} {R_{i}}, \frac{P}{R_{j}} ) > max( \frac{P \times L_{i}} {R_{j}}, \frac{P}{R_{i}} )max(Ri​P×Lj​​,Rj​P​)>max(Rj​P×Li​​,Ri​P​)

同时约去PPP,得:
max(LjRi,1Rj)>max(LiRj,1Ri)max( \frac{L_{j}} {R_{i}}, \frac{1}{R_{j}} ) > max( \frac{ L_{i}} {R_{j}}, \frac{1}{R_{i}} )max(Ri​Lj​​,Rj​1​)>max(Rj​Li​​,Ri​1​)

由于
1Rj<LiRj\frac{1}{R_{j}} < \frac{ L_{i}} {R_{j}} Rj​1​<Rj​Li​​

1Ri<LjRi\frac{1}{R_{i}} < \frac{ L_{j}} {R_{i}} Ri​1​<Ri​Lj​​

则我们只需要满足

LiRj<LjRi\frac{L{i}}{R_{j}} < \frac{ L_{j}} {R_{i}} Rj​Li​<Ri​Lj​​

Li×Ri<Lj×RjL_{i} \times R_{i} < L_{j} \times R_{j}Li​×Ri​<Lj​×Rj​

也就是说,当L×RL \times RL×R 小的在前面时,总的答案就会更优

然后就是喜闻乐见的高精度了

Code

#include<bits/stdc++.h>
using namespace std;
#define _(d) while(d(isdigit(ch=getchar())))
template<class T>void g(T&t){T x,f=1;char ch;_(!)ch=='-'?f=-1:f;x=ch-48;_()x=x*10+ch-48;t=f*x;}
#define rep(i,a,b) for(int i=a;i<=b;i++)
#define repd(i,a,b) for(int i=a;i>=b;i--)
#define For(i,a,b) for(int i=a;i<b;i++)
const int N=1e4+4;
struct Man{int l,r;bool operator<(const Man &rhs)const{return l*r<rhs.l*rhs.r;}
}m[N];
int a,b,n;
struct Int{int a[10004];//a[0] 表示位数Int operator*(int b)const{Int tmp; tmp.a[0]=0;int t=log(b)/log(10); rep(i,1,t+a[0]+2) tmp.a[i]=0;rep(i,1,a[0]){int tt=a[i]*b;
//          cout<<i<<"---"<<tt<<endl;
int t0=0;while(tt){tmp.a[i+t0]+=tt%10;tt/=10; t0++;}}repd(i,t+a[0]+1,0) if(tmp.a[i]>0){tmp.a[0]=i; break;}return tmp;} Int operator/(int b)const{Int tmp; tmp.a[0]=0;rep(i,1,a[0]) tmp.a[i]=0;if(a[0]==0) return *this;int tt=0,p=0;bool fl=0;repd(i,a[0],1){tt=tt*10+a[i];if(tt>=b){if(!fl) tmp.a[0]=i;fl=1;tmp.a[i]=tt/b;p=tt%b;tt=p;}}return tmp;}bool operator<(Int b)const{if(a[0]<b.a[0]) return true;else if(a[0]>b.a[0]) return false;else repd(i,a[0],1){if(a[i]<b.a[i]) return true;else if(a[i]>b.a[i]) return false;}}
}ans,s;
int main(){g(n);g(m[0].l),g(m[0].r);rep(i,1,n) g(m[i].l), g(m[i].r);sort(m+1,m+1+n);ans.a[1]=1;ans.a[0]=1; s.a[1]=s.a[0]=1;rep(i,1,n){if(ans<s/m[i].r) ans=s/m[i].r,ans.a[0]--;s=s*m[i].l;}repd(i,ans.a[0],1) printf("%d",ans.a[i]);return 0;
}

NOIP 提高组 2012 / 洛谷P1080 国王游戏 题解相关推荐

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

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

  2. 洛谷P1080 国王游戏

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

  3. 洛谷 P1080 国王游戏

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

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

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

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

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

  6. 2017提高组D1T1 洛谷P3951 小凯的疑惑

    洛谷P3951 小凯的疑惑 原题 题目描述 小凯手中有两种面值的金币,两种面值均为正整数且彼此互素.每种金币小凯都有 无数个.在不找零的情况下,仅凭这两种金币,有些物品他是无法准确支付的.现在小 凯想 ...

  7. 洛谷 P4815 狼人游戏 题解

    洛谷 P4815 [CCO2014] 狼人游戏 首先题目中有 3 3 3 个限制: 没有机器人又被指控又被保护: 没有机器人被指控或保护一次以上: 如果有一个编号为 A A A 机器人指控或保护编号为 ...

  8. 洛谷P1057传球游戏题解--zhengjun

    题目描述 上体育课的时候,小蛮的老师经常带着同学们一起做游戏.这次,老师带着同学们一起做传球游戏. 游戏规则是这样的: n n n个同学站成一个圆圈,其中的一个同学手里拿着一个球,当老师吹哨子时开始传 ...

  9. 洛谷P2670扫雷游戏题解

    题目 这道题是一个简单的模拟搜索题,可以把每个雷的位置都记作1. 这样就可记录出数字啦 #include<iostream> #include<cstring> using n ...

最新文章

  1. Beaglebone Black的启动
  2. Firefox XUL
  3. MyBatis-22MyBatis缓存配置【一级缓存】
  4. 详解KMP算法原理,以及完整java与C++实现
  5. 消息通信库ZeroMQ 4.0.4安装指南
  6. matlab 如何画二维图形,Matlab 学习 画图篇 一 二维图形
  7. 利用 Charles Proxy 下载旧版本 iOS App
  8. error汇总:dpkg: error processing package *** (--configure)
  9. unix进程的环境--unix环境高级编程读书笔记
  10. HDOJ--2112--
  11. 教师计算机应用能力现状分析,信息技术教学应用个人现状分析以及发展计划
  12. STM32F401CCU6 核心板的功能描述(针对采集数据)
  13. windows下使用命令行禁用笔记本自带键盘
  14. 软件工程——数据流图
  15. 目标决定人生,制定属于你自己的目标
  16. SubShader中的LOD
  17. 用Power BI解读幸福星球指数
  18. 算法设计与分析: 6-8 圆排列问题
  19. ZLG_USBCAN-Ⅱ+ 设置滤波问题
  20. ImageLoader和GridView小总结

热门文章

  1. Hank的无线802.11学习笔记--2
  2. C语言求1到20的阶乘之和
  3. 精通lambda表达式:Java多核编程pdf
  4. 我国最早研究计算机的科学家,我国著名计算机科学家、西安交大教授郑守淇逝世,享年93岁...
  5. 数字身份_数字身份作为投资
  6. vue+echarts地图下钻(全国-省-市)
  7. 木棍上的蚂蚁jolj2466 模拟法
  8. ACM日历题新版(界面修改+国际节日)
  9. pythonarray什么意思_python数组array.array(转帖)
  10. 图神经网络 —— 排列不变函数