A Number Between Two Others 的题解
记住只在没有思路时使用题解,不要从它复制粘贴代码。请尊重题目和题解的作者。
在解题之前提交题解的代码会导致封禁。
在解题之前提交题解的代码会导致封禁。
作者:
概述
本题判断在给定 的条件下,是否存在整数
满足
、
且
。
核心解法是将问题转化为判断比值 是否为
,若不是则一定存在这样的
。
分析
核心观察
设 ,其中
为大于
的整数。则任何满足
且
的
可写为
,其中
。
此时条件 等价于
。因此问题变为:是否存在整数
(
)使得
不整除
。
思路
若 ,则不存在整数
满足
,因此无解。
若 ,取
。因为
,所以
成立。同时
,所以
。
对应取 ,则
位于
与
之间且能被
整除,且
(因为
,
,
)。
因此除 外均有解,只需判断
是否成立。
具体示例
样例 :
,无解,输出 NO。
样例 :
,取
,
?不整除,满足,输出 YES。
样例 :
,取
,
,
,满足,输出 YES。
算法步骤
- 读入测试用例数
。
- 对于每组数据,读入
和
。
- 若
,输出
"NO";否则输出"YES"。
复杂度分析
- 时间复杂度:
。
- 空间复杂度:
。
实现注意事项
最大可达
,计算
时不会溢出 64 位有符号整数(最大
),使用
long long安全。- 比较时直接使用
y == 2 * x即可,无需除法避免精度问题。 - 输出大小写不敏感,统一输出大写。
源代码
#include <bits/stdc++.h>
using namespace std;
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int t;
cin >> t;
while (t--) {
long long x, y;
cin >> x >> y;
if (y == 2 * x) {
cout << "NO\n";
} else {
cout << "YES\n";
}
}
return 0;
}
import sys
def main():
data = sys.stdin.buffer.read().split()
if not data:
return
t = int(data[0])
out = []
idx = 1
for _ in range(t):
x = int(data[idx]); y = int(data[idx + 1])
idx += 2
if y == 2 * x:
out.append("NO")
else:
out.append("YES")
sys.stdout.write("\n".join(out))
if __name__ == "__main__":
main()
评论