NOIP2012提高组day1T2国王游戏 题解

来源:互联网 发布:婵真洗面奶知乎 编辑:程序博客网 时间:2024/04/28 17:43

题目描述

恰逢 H 国国庆,国王邀请 n 位大臣来玩一个有奖游戏。首先,他让每个大臣在左、右手上面分别写下一个整数,国王自己也在左、右手上各写一个整数。然后,让这 n 位大臣排成一排,国王站在队伍的最前面。排好队后,所有的大臣都会获得国王奖赏的若干金币,每位大臣获得的金币数分别是:排在该大臣前面的所有人的左手上的数的乘积除以他自己右手上的数,然后向下取整得到的结果。国王不希望某一个大臣获得特别多的奖赏,所以他想请你帮他重新安排一下队伍的顺序,使得获得奖赏最多的大臣,所获奖赏尽可能的少。注意,国王的位置始终在队伍的最前面。

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


解题金钥匙(关键词):ai*bi排序、高精度、高精除以低精、高精乘、(也可以用压位高精)

即将左手与右手的乘积从小到大排序,然后计算求最大值即可

贪心证明:第i个大臣左右手写的是a,b第j个大臣左右手写的是x,y,i之前的左手分数为q,i->j之间为p那么现在最大分数是max(q/b,q*a*p/y) 化简以后:max(1/b,a*p/y)又因为是向下取整所以1/a==0,1一定小于x*p/y(至于1的情况 自己手写一下发现并不影响)同理交换之后 max(q/y,q*p*x/b)->max(1/y,p*x/b)->p*x/b即是比较min(p*x/b,a*p/y)->min(x/b,a/y)要求x/b x*y<a*b就是冲要条件

0 0
原创粉丝点击