原题:
B. A and B
time limit per test
1 second
memory limit per test
256 megabytes
input
standard input
output
standard output
You are given two integers a and b. You can perform a sequence of operations: during the first operation you choose one of these numbers and increase it by 1; during the second operation you choose one of these numbers and increase it by 2, and so on. You choose the number of these operations yourself.
For example, if a=1 and b=3, you can perform the following sequence of three operations:
add 1 to a, then a=2 and b=3 ;
add 2 to b, then a=2 and b=5 ;
add 3 to a, then a=5 and b=5
Calculate the minimum number of operations required to make a and b equal.
Input
The first line contains one integer t
(1≤t≤100) — the number of test cases.
The only line of each test case contains two integers a and b (1≤a,b≤10^9).
Output
For each test case print one integer — the minimum numbers of operations required to make a
and b equal.
Example
Input
3
1 3
11 11
30 20
Output
3
0
4
Note
First test case considered in the statement.
In the second test case integers a
and b
are already equal, so you don’t need to perform any operations.
In the third test case you have to apply the first, the second, the third and the fourth operation to b
(b turns into 20+1+2+3+4=30).
中文:
给你两个数a和b,每次可以在a或者b上加i,i从1开始,每次递增1。最后问你最少执行多少次加法运算可以使a和b相等。
代码:
#include
#include
#include
#include
#include
using namespace std;
const int maxn = 300005;
typedef long long ll;
typedef pair<ll, ll> pll;
ll x, y;
int main()
{
ios::sync_with_stdio(false);
int t;
cin >> t;
while (t--)
{
cin >> x >> y;
if (x == y)
{
cout << 0 << endl;
}
else
{
ll d = abs(x - y);
ll ans = 1;
while (true)
{
ll sum = ans*(ans + 1) >> 1;
if (sum >= d && (sum & 1) == (d & 1))
{
cout << ans << endl;
break;
}
ans++;
}
}
}
//system("pause");
return 0;
}
解答:
这b题,硬做超时,需要找规律。
首先可以确定,最后加到a和b上的数的总和一定是n*n(+1)/2
那么,执行的加法次数肯定是n,现在需要找到这个最小的n
这里需要对前n项和进行观察,如果a与b差的奇偶性与前n项和的就奇偶性相同,原因:
设a与b差的绝对值是diff,前n项和是sum。
如果diff是奇数,那么需要将sum分割成两部分,一部分奇数填补diff,另一部分需要是偶数,分别加到a和b上
如果diff是偶数,那么同样,先将diff填补,然后将剩余的偶数分别加到a和b上即可