单调性:多加几次,出现的数不会变少,肯定可以二分。
最多操作\(p-1\)次,也就是最多进位一次。
而且最多只会进位一次,对于最后一位在加的过程中出现的值,直接用式子算,然后为了统计出现的数的次数,在其他位的数,如果在最后一位变化的范围里,就不应该加1。
但是题解又有不用二分的做法……
首先不进位,肯定说明\([0,a[n])\)的数都出现过了。
这个时候统计一下\(a[1,n-1]\)判断一下是否要进位。
如果确实不用进位,那么其它位都不会变,只需要加到没出现的最大值即可。
这个没出现的最大值直接从\(p-1\)开始枚举,第一个没出现的就行(这样是\(O(n)\)而非\(O(p)\)的)。
如果要进位,先统计进位前的位数,再统计进位后的结果,同样是要加到没出现的最大值,但是注意最后一位还没考虑呢。
考虑最后一位,其实就是\(x\ge a[n]\)都已经出现过了,所以是\(x<a[n]\)的没出现的最大值。
一样\(O(n)\)求,完事。
标签:Digits,最大值,Possible,统计,出现,进位 From: https://www.cnblogs.com/zhangchenxin/p/17805458.html