题目描述
给定一个包含 𝑛 个正整数的数列 {𝑎𝑛},小 𝐴 和小 𝐵 两人轮流进行取数游戏,小 𝐴 先手,每一轮一人从数列中选取一个数并将这个数从数列中删掉,如果小 𝐴 选择的数是偶数,则小 𝐴 的得分加上这个数,否则小 𝐴 不加分;如果小 𝐵 选择的数是奇数,则小 𝐵 的得分加上这个数,否则小 𝐵 不加分。
假设二人都采取最优策略,最后得分高的获胜,请输出获胜者,如果平局则需指明。
输入格式
第一行仅有一个正整数 𝑇(1≤𝑇≤104),表示测试数据组数;
接下来给出 𝑇T 组测试数据的具体信息,对于每组测试数据包含两行:
第一行仅有一个正整数 𝑛(1≤𝑛≤2×105);
第二行包含 𝑛n 个数,描述数列 {𝑎𝑛}。
测试数据保证各组数据中 𝑛 的总和不超过 2×105, 1≤𝑎𝑖≤2×109。
输出格式
共有 𝑇 行,依次对应每组测试数据的结果。
如果小 𝐴 获胜则输出 A
,如果小 𝐵 获胜则输出 B
,若二人得分相同,则输出 C
。
代码
#include<bits/stdc++.h>
using namespace std;
long long a[100005];
int main(){
long long n,t;
cin>>t;
for(int i=1;i<=t;i++){
cin>>n;
for(int j=1;j<=n;j++){
cin>>a[j];
}
sort(a+1,a+n+1,greater<int>());
long long aa=0,bb=0;
for(int j=1;j<=n;j++){
if(j%2==1&&a[j]%2==0){
aa+=a[j];
}
else if(j%2==0&&a[j]%2==1)bb+=a[j];
}
if(aa>bb)cout<<"A"<<endl;
else if(aa<bb)cout<<"B"<<endl;
else cout<<"C"<<endl;
}
return 0;
}