专栏文章

题解:P14054 [SDCPC 2019] Sekiro

P14054题解参与者 1已保存评论 0

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
0 条
当前快照
1 份
快照标识符
@minv8rl2
此快照首次捕获于
2025/12/02 08:54
3 个月前
此快照最后确认于
2025/12/02 08:54
3 个月前
查看原文

题意

现在有两个数 nnkk,现在你要执行 kk 次操作,每一次将 nn 变成 n/2\lceil n/2 \rceil,问你最后的 nn 是多大

题解

首先 kk 非常大,直接模拟肯定不行,但我们发现,当 n=109n = 10^9 时也最多只会除 3030 次后就在 11 徘徊。所以当 k30k \ge 30 时,直接输出 1 即可。否则直接模拟,发现时间复杂度一定是正确的。

正确代码

CPP
#include <bits/stdc++.h>
using namespace std;
int main()
{
	int t;
	cin>>t;
	while(t--)
	{
		int n,k;
		cin>>n>>k;
		if(n==0)
		{
			puts("0");
			continue;
		}
		if(k>=30) puts("1");
		else
		{
			while(k!=0)
			{
				n = n/2+n%2;
				k--;
			}
			printf("%d\n",n);
		}
	}
}

评论

0 条评论,欢迎与作者交流。

正在加载评论...