Codeforce D. Even-Odd Game(博弈+思维+贪心)

题目链接

题意:

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;
}
posted @ 2021-03-15 12:24  `KingZhang`  阅读(104)  评论(0)    收藏  举报