1 条题解
-
0
自动搬运
来自洛谷,原作者为

细数繁星
大道不孤,大爱无疆 || https://www.cnblogs.com/2044-space-elevator搬运于
2025-08-24 23:03:55,当前版本为作者最后更新于2024-09-17 14:20:14,作者可能在搬运后再次修改,您可在原文处查看最新版自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多
以下是正文
分讨,比赛的时候想了 20min,感觉黄虚高?
。暴力可解。
为正整数。有规律:答案为 ,这是为什么?
当我们将 赋为 ,答案为 。当我们将 赋为 ,答案为 。显然,差值是轮回的,但单方面不断累加只会离答案越来越远。
那不操作呢?就是 。
cout << min({abs(a), abs(b), abs(a - b)}) << endl;上文已提。
和两数大于 的情况几乎一样。
为什么这么说?因为结果终究为正数,两负数相减的绝对值等于两负数的绝对值相减的绝对值。
至于累加,因为是负数,在不考虑正负情况下与情况一一样。
只要注意加绝对值。
这个就很神奇了:对于此情况,所有结果都为 .
其实相当于只要能找到一个数 ,保证 且 ,那么就可以归 。因为所有的累加操作最终会使它们的结果一样(补充:rui_er 大佬的结论,此情况下等同于使用辗转相除法,上述提出的也就是最小公倍数,最小公倍数与最大公因数有关,因此产生该结论)。
此时将一个数赋为 ,与将一个数赋为 效果相同,所以有这个结论。
满分代码
#include <bits/stdc++.h> #define rty printf("Yes\n"); #define RTY printf("YES\n"); #define rtn printf("No\n"); #define RTN printf("NO\n"); #define rep(v,b,e) for(int v=b;v<=e;v++) #define repq(v,b,e) for(int v=b;v<e;v++) #define rrep(v,e,b) for(int v=b;v>=e;v--) #define rrepq(v,e,b) for(int v=b;v>e;v--) #define stg string #define vct vector using namespace std; typedef long long ll; typedef unsigned long long ull; void solve() { ll a, b; cin >> a >> b; if (a < b) swap(a, b); if (a * b >= 0) cout << min({abs(a), abs(b), abs(a - b)}) << endl; else { cout << 0 << endl; } } main() { int t; cin >> t; while (t--) solve(); return 0; }
- 1
信息
- ID
- 10254
- 时间
- 1000ms
- 内存
- 512MiB
- 难度
- 3
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者