题目:http://codeforces.com/contest/1065/problem/C
题意:有n座塔,塔高h[i],每次给定高度H对他们进行削切,要求每次削掉的所有格子数不能超过k个,输出最少削几次才能使所有塔的高度相同。
思路:
比较明显,只要知道对应的每层高度有多少个格子,然后再从高到低下来使其符合<k的条件即可。
而去求得每层高度对应多少个格子,暴力跑肯定是不行的。
正确的方法:
第一层的格子数是n个,对于每输入的高度h,肯定该塔对应的h+1高度的格子就没有了,所以每次输入,即可,这样上一层的格子数减去(h[]本来就是<=0的了)这一层减少了的格子数就是本层的格子数了。 (这种对于塔高度如 1 3 5,的也没有影响,反正h[2]=-1,h[3]=0,该减的地方减了,不用减的地方也为0了,符合的)
要注意的:
1.最后跳出循环后,如果累计的格子数tmp之前是没有超过k的,且还有剩余的ÿ