专栏文章

题解:CF2137C Maximum Even Sum

CF2137C题解参与者 3已保存评论 7

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
7 条
当前快照
1 份
快照标识符
@minz3nsz
此快照首次捕获于
2025/12/02 10:42
3 个月前
此快照最后确认于
2025/12/02 10:42
3 个月前
查看原文

CF2137C 题解

题意

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

思路

显然可以分类讨论。
对于最简单的情况,a,ba,b 均为奇数,可以选择 k=bk=b 进行操作,使 (a,b)(a,b) 变为 (ab,1)(ab,1)
aa 为偶数,bb 为奇数,容易发现对于任意的 kk 都不会使 a,ba,b 的奇偶性发生改变,因此 a+ba+b 始终为奇数,输出 -1
aa 为奇数,bb 为偶数,如果 bmod4=2b \bmod 4 = 2,那么当 kk 为奇数时 aa 为奇数 bb 为偶数,kk 为偶数时 aa 为偶数 bb 为奇数,显然不能相加为偶数,输出 -1。如果 bmod4=0b \bmod 4 = 0,则选择 k=b2k=\dfrac{b}{2},使 (a,b)(a,b) 变为 (ab2,2)(\dfrac{ab}{2},2)
aa 为偶数,bb 为偶数,取 k=b2k=\dfrac{b}{2},使 (a,b)(a,b) 变为 (ab2,2)(\dfrac{ab}{2},2)

代码

CPP
#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;
}

评论

7 条评论,欢迎与作者交流。

正在加载评论...