题解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 
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;
    }
}

你可能感兴趣的:(题解Codeforces1278B)