题解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;
	}
}
原文地址:https://www.cnblogs.com/littlefrog/p/12191651.html