题目链接
题意:
Alice和Bob在数组a中的n个整数,选择数字
Alice如果选择偶数,那么将这个数字加到Alice的得分中,如果选择了奇数,则不计分
Bob如果选择奇数,那么将这个数字加到Bob的的分钟,如果选择了偶数,则不计分
两者皆采取最优策略,Alice先走,得分多者获胜,如果是平局则输出Tie。
思路
最优方案就是一方面让自己最大,另一方面是尽量使对方最小.
这就决定了都从最大的来看,先看Alice,他想要偶数,所以如果最大的是偶数,那么Alice就直接拿走.否则就是奇数,Alice维拉不让Bob不拿最大所以就给拿了这样Alice也不加分.
同理看Bob也是这样的,他想要奇数,最大的是奇数直接拿走,不是也拿走不让Alice拿.
#include <bits/stdc++.h>
using namespace std;
const int maxn = 3e5+10;
typedef long long ll;
ll a[maxn];
int main() {
ll t;
cin>>t;
while(t--){
ll n,m;
cin>>n;
for(int i=1;i<=n;i++){
scanf("%lld",&a[i]);
}
sort(a+1,a+1+n);
ll sum=0,ans=0,flag=0;
for(int i=n;i>=1;i--){
if(flag%2){
//b j
if(a[i]%2){
ans+=a[i];
}
}else {
///a o
if(a[i]%2==0){
sum+=a[i];
}
}
flag++;
}
if(sum>ans) puts("Alice");
else if(sum==ans) puts("Tie");
else puts("Bob");
}
return 0;
}