题目链接:点击打开链接
题意:有n个人,每个人都有一定数量的硬币, 每天硬币最多的人会把自己的一个硬币赠给硬币最少的人,问k天之后硬币最多的人和硬币最少的人的硬币数量之差为多少?
思路:k最大为10^9,暴力模拟的话,肯定会超时。此题的正解为二分加思维,二分出最多硬币数和最少硬币数,两者相减得到结果。二分之前先确定最多硬币数的下界和最少硬币数的上界,如果总硬币数sum能整除人数n,最多硬币数的下界和最少硬币数的上界都可以取到sum / n;否则最少硬币数的上界能取到sum / n,最多硬币数的下界能取到sum / n + 1。注意三点,第一点,每次赠送硬币的结果是,最大硬币数变小、最小硬币数变大,这点对于二分过程中范围的变化至关重要;第二点,对于题意还要注意到一点,当n个人的硬币数量相同,即使没到k天后,赠送也要结束;第三点,拿check1为例,check1中最后比较sum与k有两种作用,作用一是看k够不够用来变化相关值到当前最值,若是满足k>sum且下一个最值的取值不满足,