题解:ABC272C-Max Even
·题目
链接(Atcoder):题目。
链接(洛谷):题目。
·难度
算法难度:入门。
思维难度:入门。
调码难度:入门。
综合评价:极简。
·算法
贪心。
·思路
偶数是由“奇数+奇数”或“偶数+偶数”得来的,我们找到最大与次大的奇数相加,最大与次大的偶数相加,取最大值即可。
·细节
想要偷懒,可以在去最大次大值前对a进行排序,从后往前最先找到的一对奇数与一对偶数相加,当然如果只找到了一个奇数(或偶数),可以把奇数(或偶数)的和设为-1。
·代码
链接(Atcoder):AC。
链接(洛谷):AC。
#include<bits/stdc++.h>
#define N 220000
using namespace std;
int a[N]={},n=0,s1=0,s2=0,x=0,y=0;
int main(){
scanf("%d",&n);
for(int i=1;i<=n;i++){
scanf("%d",&a[i]);
}
sort(a+1,a+n+1);
for(int i=n;i>=1;i--){
if(a[i]%2==0){
if(s2<2){
s2++;
y+=a[i];
}
}else{
if(s1<2){
s1++;
x+=a[i];
}
}
}
if(s1<2){
x=-1;
}
if(s2<2){
y=-1;
}
printf("%d\n",max(x,y));
return 0;
}
·注意
一定要判断是否找到了两个奇数(或偶数)。