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

猜你喜欢

转载自blog.csdn.net/weixin_45911397/article/details/114826547