Stoned Game

题目链接
题意:
有n堆石子,每堆有若干个石子。两者轮流取一个石子。但不能取上次对手取过的那一堆。特殊的,第一次取可以取任何一堆的石子。当前一人取完要取的石子之后使对手无路可走时,该人获胜。
思路:
情况一:当前石子总数为sum,最大堆的石子数为s,当s大于sum-s时,先手必胜,因为可以一直取该堆。情况二:就是不是情况一,当前回合的人肯定不会取完后让情况一发生,不然就输了,所以所有的石子都会取完,故直接判断sum的奇偶就可以了。具体实现见代码。

点击查看代码
#pragma GCC optimize("O3")
#pragma G++ optimize("O3")
#include <bits/stdc++.h>
using namespace std;
#define endl '\n'
#define int long long
#define ll long long 
const int N = 2e5+5;
int arr[N];
bool cmp(int a,int b){
    return a>b;
}
void solve(){
    int n;
    cin>>n;
    int sum=0;
    int zuida=0;
    for(int i=1;i<=n;++i){
        cin>>arr[i];
        sum=sum+arr[i];
        zuida=max(zuida,arr[i]);
    }
    if(zuida>sum-zuida){
        cout<<"T"<<endl;
        return ;
    }
    if(sum&1){
        cout<<"T"<<endl;
    }else{
        cout<<"HL"<<endl;;
    }
   
}
signed main(){
    ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
    int _=1;
    cin>>_;
    while(_--)
    solve();
    return 0;
}
posted @ 2025-02-18 13:40  sjgigj  阅读(11)  评论(0)    收藏  举报