如果存在一堆石子個數大於剩餘所有堆的的石子總數,那麼先手佔據此堆石子,先手勝。
否則,考慮最終狀態必定只有一堆石子,現證明雙方都可以通過設定操作策略爲取走目前可取的石子最多的那堆做到最後一堆石子被拿乾淨:
假設不被拿乾淨,必定是出現了最多石子的那堆石子數目大於其他之和的狀態(例如最終狀態),逆推回去可以發現每兩次取石子就有一個人取了這堆,逆推至初始狀態與“否則”矛盾,不成立。
只需判斷總石子數奇偶即可。
#include<cstdio>
#include<iostream>
using namespace std;
int T,n;
int a[1005],maxn,pos,sum;
int main(){
scanf("%d",&T);
while(T--){
scanf("%d",&n);
sum=0,maxn=0,pos=0;
for(int i=1;i<=n;i++){
scanf("%d",&a[i]);
if(maxn<a[i]){
maxn=a[i];
pos=i;
}
}
for(int i=1;i<=n;i++){
if(i==pos) continue;
sum+=a[i];
}
if(a[pos]>sum){
printf("T\n");
}
else{
if((sum+a[pos])&1) printf("T\n");
else printf("HL\n");
}
}
return 0;
}