#iai20a1. 无尽的循环(Infinite Loop)
无尽的循环(Infinite Loop)
无尽的循环(Infinite Loop)
题目描述
有一段C++代码如下:
i = a;
while (i != b)
i += c;
代码的语义是一个循环变量 i 开始于 a,当且仅当它等于 b 时退出循环,每次循环完成时 i 会增加 c。
规定所有变量在内存中都是用 k 位无符号二进制表示的,加法溢出后效果相当于取 2^k 的模。请模拟这段程序,统计执行了多少次循环?
输入格式
四个整数:a,b,c 和 k。
输出格式
- 如果循环可以结束,输出循环次数;
- 否则输出
Inf。
样例输入 #1
3 3 2 16
样例输出 #1
0
样例输入 #2
3 7 2 16
样例输出 #2
2
样例输入 #3
7 3 2 16
样例输出 #3
32766
样例输入 #4
4 3 2 16
样例输出 #4
Inf
数据范围
- 对于 30% 的分数,1 ≤ k ≤ 10;
- 对于 60% 的分数,1 ≤ k ≤ 30;
- 对于 100% 的分数,1 ≤ k ≤ 60;
- 0 ≤ a, b, c < 2^k
知识点与难度
本题涉及的知识点从属于 GESP 5级,难度等级:⭐⭐⭐。
测试点分布
| Subtask | 分值 | 测试点编号 | 说明 |
|---|---|---|---|
| 0 | 10 | 1~2 | 样例 |
| 1 | 20 | 3~8 | 小规模 k≤10 / 特殊: a=b / c=0 |
| 2 | 15 | 9~11 | Hack: 大k值溢出 / c与2^k不互素 / a=b=0 |
| 3 | 30 | 12~20 | 中规模 k≈30~50 / 大规模 k=60 压力 |
| 4 | 25 | 21~25 | 随机 k=1~60 回归 |