题解:CF2137C Maximum Even Sum

题意是给定两个数 \(a,b\),你可以进行一次操作,选定一个 \(b\) 的因数 \(k\),将 \(a\) 变为 \(a \times k\),并将 \(b\) 变为 \(b/k\),求出如何操作可以使得 \(a+b\) 是一个偶数,并且值最大,请输出这个最大值。
如果不考虑 \(a+b\) 是否为偶数,容易想到最大值为 \(a\times b+1\)
接着考虑如何使 \(a+b\) 为偶数。
首先如果 \(a,b\) 均为奇数,答案必然为 \(a\times b+1\)。因为奇数的乘积必然还是奇数。
接着如果 \(b\) 为奇数,\(a\) 为偶数必然无解。因为无论如何操作都不可能让 \(b\) 变为偶数。
剩余情况由于 \(b\) 为偶数则必然可以进行一次操作,只需要判断乘积是否为4的倍数即可。
代码如下:

#include<bits/stdc++.h>
using namespace std;
int t;
long long a,b;
int main(){
	ios::sync_with_stdio(0);
	cin.tie(0);cout.tie(0);
	cin>>t;
	while(t--){
		cin>>a>>b;
		if(a%2&&b%2)cout<<a*b+1<<'\n';
		else if(a%2){
			long long k=a*b;
			if(k%4==0)cout<<k/2+2<<'\n';
			else cout<<"-1\n";
		}
		else{
			if(b%2)cout<<"-1\n";
			else cout<<a*b/2+2<<'\n';
		}
	}
}
posted @ 2025-09-14 16:14  zhuoheng  阅读(12)  评论(0)    收藏  举报