题解Codeforces1278B
原题链接:https://codeforces.com/problemset/problem/1278/B
标签
贪心 数学/数论
解法
首先使用类似前缀和的方法,对\(1+2+3+4+5+\dots\) 进行累加,再使用枚举的形式,将其去减下\(|a-b|\) (a-b的绝对值) (此时a与b已经相等)如果还可以将剩下的平均分成两半,加到a和b上,使a,b相等,即可。
代码
ISO C++11
#include <iostream>
using namespace std;
long long n, a, b, sum[1000100];
int main() {
cin >> n;
sum[0] = 0; sum[1] = 1;
for (int i = 2; i <= 1000001; ++i) {
sum[i] = sum[i - 1] + i;
}
while (n--)
{
cin >> a >> b;
if (a == b) {
cout << 0 << endl;
continue;
}
int ans = 0, t = abs(a - b);
for (int i = 1; i <= 1000001; ++i) {
if (sum[i] < t) {
continue;
}
if ((sum[i] - t) % 2 == 0) {
ans = i;
break;
}
}
cout << ans << endl;
}
}
Copyright littlefrog(2019)
所有权利保留。