【补题】Codeforces Round 666 (Div. 1) B. Stoned Game

题意:每人轮流可以拿走一个石子,但是不能拿上一回合碰过的石子堆,请问最后是谁获胜了。

思路:       Codeforces Round #666 (Div. 1) 题解 (AB) - axiomofchoice - 博客园

感觉自己还是太愚蠢了

如果有一堆石子很多,别的石子堆相加都比不上,那么先手永远选那一堆就行,另外一人一定会选别的,那这样我就能继续选着了,最后对方一定会因为没石子可选。

如果并不是一堆石子,那就只能先手后手都去选目前场上还剩下最多石子的石头堆,因为这样才能尽最大可能让自己获胜。

代码:

#include 
#define int long long
#define int128 __int128
#define IOS                                                                                                            \
    std::ios::sync_with_stdio(0);                                                                                      \
    std::cin.tie(0);                                                                                                   \
    std::cout.tie(0);
const int N = 1e6 + 10;
const int INF = 1e18;
const int MOD = 998244353;

void solve() {
    int n;
    std::cin >> n;
    std::vector ve(n);
    int maxx = 0;
    int sum = 0;
    for(int i = 0; i < n; i++) {
        std::cin >> ve[i];
        maxx = std::max(maxx, ve[i]);
        sum += ve[i];
    }

    if(maxx > sum - maxx) {
        std::cout << "T" << '\n';
    } else {
        std::cout << ((sum % 2 == 0) ? "HL" : "T") << '\n';
    }
}

signed main() {
    IOS;

    int t = 1;
    std::cin >> t;
    while(t--) {
        solve();
    }
}

你可能感兴趣的:(算法,数据结构)