T4模考题解

讲解一下这道题目的思路:

首先呢我们确定 for 循环·的遍历顺序从 2 开始向 n 遍历。

如果我们遇到 ceil[i] 大于 ceil[i+1] 则我们就需要对 ceil[i] 进行分割。

接下来就是如何计算该劈成几份使得 ceil[i] 不超过 ceil[i+1] 可以得到我们需要将 ceil[i] 劈成 (ceil[i]+ceil[i+1]-1)/ceil[i+1] 份,那么我们需要操作的次数就是份数减 1

我们将答案加上操作次数,并且更新 ceil[i] 为被劈后的大小 ceil[i]/p 其中 p 为被劈的份数。

这就是我们的思路然后放上伪代码:

    for(int i=n-1;i>=1;i--){
        if(c[i]<=c[i+1])continue;
        int p=/*份数*/
		cnt+=p-1;//加上答案
        c[i]=c[i]/p;//更新
    }
2 个赞