题目来源
题干
个人思路
在while循环中,只要目前上传成功的电脑不大于总电脑数,并且每次操作的次数不大于操作能力限
则执行操作,并且让每次让执行能力按照2的n次方递增,由于最后一次执行可能会让sum+i的结果大于总电脑数,所以在出while循环进行if判断时,用来判断的余数应该保证要大于0,否则小于0则不需要后期的操作
当达到能力限但依旧还有电脑没完成,则按照最大能力限来执行后面的操作并且判断剩余没完成的电脑是否为能力限的倍数,如果有余数,则最后还要再加一
代码段
void solve()
{
ll n, k,i=1;
ll count=0,sum =1;
cin >> n >> k;
while (i <= k&&sum<=n)
{
sum += i;
count++;
i *= 2;
}
if ((n - sum)%k>0)
count+=(n-sum)/k+1;
else if((n - sum) % k == 0)
count += (n - sum) / k;
cout << count << endl;
}