

翻译:
谁有两个偶数𝑥和𝑦。帮助他找到一个整数𝑛,使1≤𝑛≤2⋅1018,且𝑛mod𝑥=𝑦mod𝑛。这里,𝑎mod𝑏表示𝑎除以𝑏后的余数。如果有多个这样的整数,则输出any。可以证明,在给定的约束条件下,这样的整数总是存在的。
输入
第一行包含一个整数𝑡(1≤𝑡≤105)——测试用例的数量。
每个测试用例的第一行也是唯一一行包含两个整数𝑥和𝑦(2≤𝑥,𝑦≤109,都是偶数)。
输出
对于每个测试用例,请打印满足命题条件的单个整数𝑛(1≤𝑛≤2⋅1018)。如果有多个这样的整数,则输出any。可以证明,在给定的约束条件下,这样的整数总是存在的。
例子
inputCopy
4
4 8
4个2
420 420
69420 42068
outputCopy
4
10
420
9969128
请注意
在第一个测试用例中,4mod4=8mod4=0。
在第二个测试用例中,10mod4=2mod10=2。
在第三个测试用例中,420mod420=420mod420=0。
思路:
很明显分为两种情况,x>=y,x
由于 y 和 x 都是偶数,所以 y - p * x 一定也是一个偶数,
我们只需取 [p * x, y] 的中值即可,
也就是说 n = y - (y - p * x) / 2,
换句话说,此时 y % (p * x) = y - p * x 等价于 y % x,那么 n = y - y % x / 2
代码:
- #include
- #include
- #include
- #include
- #include
- #include
- #include
- #include
- #include
- #include
- #include
- #include
- using namespace::std;
- typedef long long ll;
- int n,t;
- ll x,y;
- void solv(){
- cin>>x>>y;
- if (y
- printf("%lld\n",x+y);
- }
- else if (x==y){
- printf("%lld\n",x);
- }
- else{
- printf("%lld\n",(y/x*x+y)/2);
- }
- }
- int main(){
- ios::sync_with_stdio(false);
- cin.tie(); cout.tie();
- cin>>t;
- while (t--) {
- solv();
- }
- return 0;
- }
-
-