zoukankan      html  css  js  c++  java
  • Codeforces Round #693 (Div. 3) D. Even-Odd Game

    点击题目可传送至题面

    D. Even-Odd Game

    题目分析

    题意请去看题面

    这是一道博弈论+贪心的题目。输入一串数字之后,Bob和Alice可以任意选择其中的一个数字,来让自己的得分最高,那么我们不妨将输入的数字排一下序,根据得分规则,他们可以选择拿走能让自己加分的数字来提高自己的分数,也可以选择拿走不能让自己加分的数字,破坏能让对手加分的数字

    所以可以让选手每次选择最大的数字,如果能让自己得分,那么拿走让自己得分,如果不能自己得分,那就拿走不让对手得分,最后比较一下二者的分数即可。具体实现思路请看下方代码

    AC代码

    #include<iostream>
    #include<algorithm>
    using namespace std;
    typedef long long ll;
    bool cmp(ll a, ll b){
        return a > b;
    }
    const int N = 200200;
    long long q[N];
    int T, n, m;
    int main(){
        ios_base::sync_with_stdio(false), cin.tie(0), cout.tie(0);
        cin >> T;
        while(T--){
            long long Alice = 0, Bob = 0;
            cin >> n;
            for(int i = 0; i < n; i++) cin >> q[i];
            sort(q, q + n, cmp); // 当然你也可以从小到大排序
            for(int i = 0; i < n; i++){
                // 由于Alice是先手,所以 i 为偶数时是Alice的回合,为奇数是Bob的回合
                if(i % 2 == 0 && q[i] % 2 == 0) Alice += q[i];
                else if(i & 1 && (q[i] & 1)) Bob += q[i];
            }
            if(Alice > Bob) cout << "Alice" << endl;
            else if(Alice < Bob) cout << "Bob" << endl;
            else cout << "Tie" << endl;
        }
        
        return 0;
    }
    
  • 相关阅读:
    Timed Code
    jQuery的deferred对象详解
    ASP.NET MVC 使用Redis共享Session
    .NET垃圾回收(GC)原理
    强命名程序集,签名,延迟签名
    CLR 关于强命名程序集 .
    .NET程序集强命名删除与再签名技术 源代码剖析
    应用Strong Name保存.NET应用程序集
    使用强命名程序集防范篡改
    1.浅谈CLR
  • 原文地址:https://www.cnblogs.com/FrankOu/p/14235417.html
Copyright © 2011-2022 走看看