题解:CF2137C Maximum Even Sum

· · 题解

CF2137C 题解

题意

给定两个数 a,b,你可以选择一个 b 的因子 k,让 a 变为 a\times kb 变为 b \div k,求一次操作完 a+b 的最大偶数值,若不可能输出 -1

思路

显然可以分类讨论。

对于最简单的情况,a,b 均为奇数,可以选择 k=b 进行操作,使 (a,b) 变为 (ab,1)

a 为偶数,b 为奇数,容易发现对于任意的 k 都不会使 a,b 的奇偶性发生改变,因此 a+b 始终为奇数,输出 -1

a 为奇数,b 为偶数,如果 b \bmod 4 = 2,那么当 k 为奇数时 a 为奇数 b 为偶数,k 为偶数时 a 为偶数 b 为奇数,显然不能相加为偶数,输出 -1。如果 b \bmod 4 = 0,则选择 k=\dfrac{b}{2},使 (a,b) 变为 (\dfrac{ab}{2},2)

a 为偶数,b 为偶数,取 k=\dfrac{b}{2},使 (a,b) 变为 (\dfrac{ab}{2},2)

代码

#include<bits/stdc++.h>
#define int long long
using namespace std;
main(){
    ios::sync_with_stdio(false);
    cin.tie(0),cout.tie(0);
    int t;
    cin>>t;
    while(t--){
        int a,b;
        cin>>a>>b;
        if(a%2==0&&b%2==1){
            cout<<-1<<endl;
            continue;
        }
        else if(a%2==0&&b%2==0){
            cout<<a*(b/2)+2<<endl; 
        } 
        else if(a%2==1&&b%2==1){
            cout<<a*b+1<<endl;
        } 
        else{
            if(b%4!=0){
                cout<<-1<<endl; 
            } 
            else{
                cout<<a*(b/2)+2<<endl;
            }
        }
    }
    return 0;
}