博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
AcWing 国王游戏
阅读量:4485 次
发布时间:2019-06-08

本文共 1198 字,大约阅读时间需要 3 分钟。

AcWing 国王游戏

Description

  • 恰逢 H 国国庆,国王邀请 n 位大臣来玩一个有奖游戏。

    首先,他让每个大臣在左、右手上面分别写下一个整数,国王自己也在左、右手上各写一个整数。

    然后,让这 n 位大臣排成一排,国王站在队伍的最前面。

    排好队后,所有的大臣都会获得国王奖赏的若干金币,每位大臣获得的金币数分别是:

    排在该大臣前面的所有人的左手上的数的乘积除以他自己右手上的数,然后向下取整得到的结果。

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

    注意,国王的位置始终在队伍的最前面。

Input

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

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

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

Output

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

Sample Input

31 12 37 44 6

Sample Output

2

Data Size

  • 1≤n≤1000
    0<a,b<10000

题解:

  • 贪心。
  • 证明用微扰法,挺容易的。详细过程见。我想表达的跟这位大大差不多。
  • 我可以说是因为公式太多我懒吗… …
  • 还有,我没有写高精度,所以只能拿60pts。懒是原罪QAQ
#include 
#include
#include
#define N 10005#define int unsigned long longusing namespace std;struct A {int l, r;} a[N];int n, l0, r0, mul, ans;bool cmp(A x, A y) {return x.l * x.r < y.l * y.r;}signed main(){ cin >> n >> l0 >> r0; for(int i = 1; i <= n; i++) cin >> a[i].l >> a[i].r; sort(a + 1, a + 1 + n, cmp); mul = l0, ans = mul / a[1].r; for(int i = 2; i <= n; i++) mul *= a[i - 1].l, ans = max(ans, mul / a[i].r); cout << ans; return 0;}

转载于:https://www.cnblogs.com/BigYellowDog/p/11296753.html

你可能感兴趣的文章
Linux的核心版本(摘抄)
查看>>
CASE表达式
查看>>
zkw线段树
查看>>
作业1226
查看>>
mainline.js主线
查看>>
fseek()
查看>>
Python学习笔记——PyQt控件中文字居中显示
查看>>
JAVA环境下利用solrj二次开发SOlR搜索的环境部署常见错误
查看>>
Beta阶段敏捷冲刺前准备
查看>>
mini web框架-3-替换模板
查看>>
Siamese Network简介
查看>>
svg学习(三)rect
查看>>
博客园博文生成章节目录
查看>>
ruby 模块 的引入
查看>>
CI Weekly #21 | iOS 持续集成快速入门指南
查看>>
xml 校验
查看>>
Jquery获取输入框属性file,ajax传输后端,下载图片
查看>>
深入浅出Visual_C动态链接库(Dll)编程(宋宝华)----整理(word)
查看>>
docker运行环境安装-后续步骤(二)
查看>>
Python学习——02-Python基础——【3集合与函数】
查看>>