分析
首先考虑 是平凡的情况。
每次物品分成 堆,最劣状态时一定有:每次目标物品出在最大的一堆,所以平均分,并上取整。
所以 下降的方式即为
据此不难得到最终的代码思路:每次除以 上取整即可,并用计数器统计一下分了几次物品,如果某次小于 份就代表一定可以一次找到目标物品。
代码
#include<cstdio>
int init(){
char c = getchar();
int x = 0, f = 1;
for (; c < '0' || c > '9'; c = getchar())
if (c == '-') f = -1;
for (; c >= '0' && c <= '9'; c = getchar())
x = (x << 1) + (x << 3) + (c ^ 48);
return x * f;
}
void print(int x){
if (x < 0) x = -x, putchar('-');
if (x > 9) print(x / 10);
putchar(x % 10 + '0');
}
int ceil(int n, int m){
return (n + m - 1) / m;
}
int main(){
int T = init();
while (T--) {
int n = init(), m = init() + 1, ans = 0;
while (n > m)
++ans, n = ceil(n, m);
print(ans + 1), putchar('\n');
}
}
整活
一种东西,有若干堆;
一堆东西,有若干样;
一样东西,有若干件;
一件东西,有若干个。
希望以后牛客比赛对题面含义清晰做出更高要求。