原题链接
题意
思路
找规律,发现
当
x
=
y
x = y
x=y 时,输出
x
x
x就行了
当 x > y x > y x>y 时,输出 x + y x + y x+y 就可以了,这样可以满足 ( x + y ) m o d y = b , b m o d ( a + b ) = b (x + y)\ mod\ y = b,\ b\ mod\ (a\ +\ b) = b (x+y) mod y=b, b mod (a + b)=b.
当 x < y x<y x<y 时,输出 ( y % x ) / 2 + y / x ∗ x (y\ \%\ x)\ /\ 2 + y\ /\ x\ *\ x (y % x) / 2+y / x ∗ x,我也不知道为啥,就是找出来的一个规律,不会证明,我想着大概是因为这样:因为都是偶数嘛,所以相除的余数肯定也是偶数所以可以除以二,这样可以使它们的结果刚好是余数的一半。
代码
#include<bits/stdc++.h>
#define int long long
using namespace std;
signed main()
{
int t; cin >> t;
while (t -- )
{
int x, y;
cin >> x >> y;
if (x == y) cout << x << endl;
else if (x > y) cout << x + y << endl;
else if (x < y) cout << y % x / 2 + y / x * x << endl;
}
return 0;
}
总结
这种题就是要多练才可以推出正解。