国王游戏

洛谷P1080国王游戏

题解

这道题有个重要的性质:如果交换相邻两个大臣,获得金钱变化的有且只有这两个大臣。其余大臣得到的金钱不变。
我们考虑第 i i i个大臣和第 i + 1 i+1 i+1个大臣交换前后的变化。
交换前,这两个大臣的奖励是
1 B [ i ] × ∏ j = 0 i − 1 A [ j ] 与 1 B [ i + 1 ] × ∏ j = 0 i A [ j ] \frac {1}{B[i]}\times \prod_{j=0}^{i-1}A[j] 与 \frac {1}{B[i + 1]}\times \prod_{j=0}^{i}A[j] B[i]1​×j=0∏i−1​A[j]与B[i+1]1​×j=0∏i​A[j]
交换后,他们获得的奖励是:
1 B [ i + 1 ] × ∏ j = 0 i − 1 A [ j ] 与 A [ i + 1 ] B [ i ] × ∏ j = 0 i − 1 A [ j ] \frac 1{B[i + 1]}\times \prod_{j=0}^{i -1}A[j] 与\frac {A[i+1]}{B[i]}\times \prod_{j=0}^{i-1}A[j] B[i+1]1​×j=0∏i−1​A[j]与B[i]A[i+1]​×j=0∏i−1​A[j]
其他大臣的奖励都不会变,因此我们只要考虑上面两组数的最大值变化即可。
提取公因式 ∏ j = 0 j − 1 A [ j ] \prod _{j=0}^{j-1}A[j] ∏j=0j−1​A[j]后,只需要比较下面两个式子的大小关系。
max ⁡ ( 1 B [ i ] , A [ i ] B [ i + 1 ] ) max ⁡ ( 1 B [ i + 1 ] , A [ i + 1 ] B [ i ] ) \max (\frac1{B[i]}, \frac {A[i]}{B[i+1]})\ \ \ \ \max(\frac {1}{B[i+1]}, \frac{A[i+1]}{B[i]}) max(B[i]1​,B[i+1]A[i]​)    max(B[i+1]1​,B[i]A[i+1]​)
同乘 B [ i ] × B [ i + 1 ] B[i]\times B[i+1] B[i]×B[i+1]
max ⁡ ( B [ i + 1 ] , A [ i ] × B [ i ] ) max ⁡ ( B [ i ] , A [ i + 1 ] × B [ i + 1 ] ) \max(B[i+1], A[i]\times B[i])\ \ \ \ \ \max(B[i],A[i +1]\times B[i+1]) max(B[i+1],A[i]×B[i])     max(B[i],A[i+1]×B[i+1])
易得 B [ i + 1 ] ≤ A [ i + 1 ] × B [ i + 1 ] B[i+1]\leq A[i+1]\times B[i+1] B[i+1]≤A[i+1]×B[i+1]和 A [ i ] × B [ i ] ≥ B [ i ] A[i]\times B[i]\geq B[i] A[i]×B[i]≥B[i]
于是 A [ i ] × B [ i ] ≤ A [ i + 1 ] × B [ i + 1 ] A[i]\times B[i]\leq A[i+1]\times B[i+1] A[i]×B[i]≤A[i+1]×B[i+1]的时候,交换前更优。所以只要按照 A [ i ] × B [ i ] A[i]\times B[i] A[i]×B[i]从小到大排序即可。
这道题统计答案要高精度。

code

#include<bits/stdc++.h>
using namespace std;
int read () {int num = 0; char c = ' '; int flag = 1;for (;c > '9' || c < '0'; c = getchar ())if (c == '-')flag = 0;for (;c >= '0' && c <= '9'; num = (num << 3) + (num << 1) + c - 48, c = getchar ());return flag ? num : - num;
}
int max (int a, int b) {return a > b ? a : b;
}
const int maxn = 1020;
struct stu {int l, r;
} x[maxn];
int mycmp (stu a, stu b) {return a.l * a.r < b.l * b.r;
}
int a, b, n;
void init () {n = read (), a = read (), b = read ();for (int i = 1;i <= n;i ++)x[i].l = read (), x[i].r = read ();
}
namespace GJD {int max (int a, int b) {return a > b ? a : b;} struct Bignum {int a[50000], n;};Bignum Read () {string s;cin >> s;Bignum x;x.n = s.length ();for (int i = 1;i <= x.n;i ++)x.a[x.n - i + 1] = s[i - 1] - 48;return x;}Bignum Print (Bignum p) {for (int i = p.n;i >= 1;i --)printf ("%d", p.a[i]);printf ("\n");}Bignum Clear (Bignum a) {a.n = 0;memset (a.a, 0, sizeof a.a);return a;}Bignum check (Bignum a) {for (int i = 1;i < a.n;i ++) {int m = a.a[i] / 10;if (m != 0) {a.a[i + 1] += m;a.a[i] %= 10;    }}while (a.a[a.n] >= 10) {a.n ++;a.a[a.n] = a.a[a.n - 1] / 10;a.a[a.n - 1] %= 10;}while (a.a[a.n] == 0 && a.n > 1) a.n --;return a;}Bignum Plus (Bignum a, Bignum b) {Bignum c; c = Clear (c);int N = max (a.n, b.n); c.n = N;for (int i = 1;i <= N;i ++)c.a[i] = a.a[i] + b.a[i];c = check (c);return c;}Bignum Mul (Bignum a, Bignum b) {Bignum c; c = Clear (c);int N = a.n + b.n - 1; c.n = N;for (int i = 1;i <= a.n;i ++)for (int j = 1;j <= b.n;j ++)c.a[i + j - 1] += a.a[i] * b.a[j];c = check (c);return c;}Bignum plus_small (Bignum a, int b) {a.a[1] += b;a = check (a);return a;}Bignum mul_small (Bignum a, int b) {for (int i = 1;i <= a.n;i ++)a.a[i] *= b;a = check (a);return a;}Bignum div_small (Bignum a, int b) {int now = 0;for (int i = a.n;i >= 1;i --) {now = now * 10 + a.a[i];a.a[i] = now / b;now %= b;}a = check (a);return a;}int bigger (Bignum a, Bignum b) {a = check (a); b = check (b);if (a.n > b.n) return 1;if (a.n < b.n) return 0;int N = a.n;for (int i = N;i >= 1;i --) {if (a.a[i] > b.a[i]) return 1;if (a.a[i] < b.a[i]) return 0;}return 2;}
} using namespace GJD;
void work () {Bignum now, ans;now = Clear (now); ans = Clear (ans);now.a[1] = a; now.n = 1;now = check (now);for (int i = 1;i <= n;i ++) {Bignum t = div_small (now, x[i].r);if (bigger (t, ans)) ans = t;now = mul_small (now, x[i].l);}Print (ans);
}
int main () {init ();sort (x + 1, x + 1 + n, mycmp);work ();return 0;
}

NOIp2012D1T2 国王游戏 题解相关推荐

  1. NOIP2012 国王游戏 题解

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

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

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

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

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

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

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

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

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

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

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

  7. 阿狸和桃子的游戏题解

    阿狸和桃子的游戏题解 每一道代码简单的黑题都有着诡异的思想,真不知道出题者怎么想的. 而这道题的重点在于把边权转换为点权, 此题的方式是将边权w平均分给被连接的两点u和v. 若u和v都被一人选择,则他 ...

  8. 洛谷P1129 [ZJOI2007] 矩阵游戏 题解

    洛谷P1129 [ZJOI2007] 矩阵游戏 题解 题目链接:P1129 [ZJOI2007] 矩阵游戏 题意:给定一张有黑白棋子的正方形棋盘,问存不存在解法使得经过若干次交换行或列的操作后,左上角 ...

  9. P1199(NOIP2010 普及组)三国游戏 题解

    P1199(NOIP2010 普及组)三国游戏题解 Step-1 输入(重点) 输入n:int n;cin>>n; 输入数组: int a[1001][1001]; for(int i=1 ...

最新文章

  1. python数据分析(九)-点积与线性代数
  2. ESP32,ESP8266之间WiFi互联实验
  3. [shell实例]——用脚本实现向多台服务器批量复制文件(nmap、scp)
  4. java 页面错误转发提示页面 errorPage转跳报HTTP500内部服务器错误
  5. 如何快速理解递归——看这个就可以了
  6. Swift面向对象基础(上)——Swift中的枚举
  7. vue 插值表达式,v-cloak,v-text,v-html,以及v-bind,v-on
  8. python 图像处理 书籍_清华大学出版社-图书详情-《深度学习技术图像处理入门》...
  9. unity shader相关工具教程
  10. 个人发卡网全开源修复版源码
  11. 开发可以自动运行程序的U盘
  12. 银河系的神秘信号:也许我们正见证真实的科幻故事
  13. 西门子博图指令(计数器操作)
  14. 软件工程导论第六版 第五章 总体设计知识点总结
  15. linux命令查看服务器的型号、序列号、内存插槽数
  16. 胡小胖:微商创业必备的硬件工具
  17. 接口(interface)与类(class)的实例互相转换
  18. 【转载】谢启鸿老师访谈录之二(12级,撰稿人:陈筠臻)
  19. 金鸽智慧农业解决方案
  20. FBI犯罪心理测试题

热门文章

  1. android免费商用图标,免费商用!!!(线性图标)
  2. 小鱼儿yr系统封装优化设置辅助工具V2.05.3
  3. android dumpsys 分析,Android内存分析工具-dumpsys meminfo
  4. 排序:quicksort,quicksort3way
  5. 道德文化水墨风景课件PPT模板
  6. 比客户的变态需求更可怕的是,有一群“猪队友”!
  7. Mac os如何安装绿盾客户端
  8. 深入浅出 GAN·原理篇文字版(完整)
  9. linux 全球用户数量,2019年6月全球桌面操作系统市场份额数据: Linux占1.55%
  10. c语言中英文翻译 毕业设计,c语言中英文翻译资料 毕业(设计)论文.doc