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

浙公网安备 33010602011771号