专栏文章
题解:P12888 [蓝桥杯 2025 国 Java B] 钟楼管理员
P12888题解参与者 2已保存评论 1
文章操作
快速查看文章及其快照的属性,并进行相关操作。
- 当前评论
- 1 条
- 当前快照
- 1 份
- 快照标识符
- @mip1p3op
- 此快照首次捕获于
- 2025/12/03 04:43 3 个月前
- 此快照最后确认于
- 2025/12/03 04:43 3 个月前
题意简述
有一个钟表,表盘上是从 到 的连续整数,初始时指针指向 。每次拨动指针,指针会移动一格,经过 次这样的随机拨动(可以顺时针也可以逆时针)后,指针可能指向多少个不同的数字?
注:表盘是环形!!!
思路
我们假设 次移动中有 次顺时针移动, 次逆时针移动,那么指针最后的位置可以表示为 ,又因为 ,所以我们将式子转化为: 。
注意到上式中只有 是变量,所以 的不同余数的个数就是最终答案。很容易可以得到 的取值范围是 到 ,并且步长为 。
分类讨论后发现 的不同余数的个数与步长 和 的最大公约数有关。
-
如果 (即 是奇数),序列 会覆盖所有可能的余数,最多为 。
-
如果 (即 是偶数),序列 会覆盖所有同奇偶的余数,最多为 。
代码
CPP#include <bits/stdc++.h>
#define int long long
using namespace std;
signed main()
{
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
int T;
cin >> T;
while (T--)
{
int n,k;
cin >> n >> k;
int ans;
if(n%2==1)ans=min(k+1,n);
else ans=min(k+1,n/2);
cout << ans << '\n';
}
return 0;
}
相关推荐
评论
共 1 条评论,欢迎与作者交流。
正在加载评论...