##Description
恰逢H国国庆,国王邀请n位大臣来玩一个有奖游戏。首先,他让每个大臣在左、右
手上面分别写下一个整数,国王自己也在左、右手上各写一个整数。然后,让这n位大臣排
成一排,国王站在队伍的最前面。排好队后,所有的大臣都会获得国王奖赏的若干金币,每
位大臣获得的金币数分别是:排在该大臣前面的所有人的左手上的数的乘积除以他自己右
手上的数,然后向下取整得到的结果。
国王不希望某一个大臣获得特别多的奖赏,所以他想请你帮他重新安排一下队伍的顺序,
使得获得奖赏最多的大臣,所获奖赏尽可能的少。注意,国王的位置始终在队伍的最前面。
##Solution
####用什么算法
首先看到最大最小的,想到了二分。推着推着推不出来,╮(╯▽╰)╭,二分。
不过仔细想了一想,要求一个序列,并且改一下位置答案可能就不同,那么就是有优先级…贪心!!!排序!!!
####算法如何解题
看到第一个肯定不变,那么还与什么可以确定。我们发现最后一个人的答案,是这个人在所有顺序中的值最大的情况。有意思。进一步思考,所有人左手的乘积为Z,当他最后时,答案是,好像越大,那么这个人的贡献就越小,而且在其他排序下不会有其他位置的贡献总贡献比当前更小的了。因为如果选的是其他人在最后一位,那么假设就交换一下位置,那么两个位置的答案总和更大。
证明:设l1,r1与l2,r2交换位置,l1之前的l乘积为Z1,l1之后的乘积为Z2
没换之前的答案:
换了之后的答案:
把两个式子移项之后就是(下面问号表示不确定关系)
因为l1r1< l2r2,所以前项<后项(这里就是确定了问号的关系)
为什么考虑二元组的和呢?因为交换位置之后一个变大,一个变小,那么比较一下和再很据l1r1< l2r2之类的就可以分别出这样更优了。
根据上面的证明,按照l*r从小到大排一次续然后依次模拟就可以了。
####记得要打高进度
可惜,考场没打高进度
##Code