原题链接
考察:博弈论
又到了我最喜欢的死活推不出规律的环节(.
思路:
对于n个石子堆,假定堆最大值为maxn,和为sum,如果maxn>sum-maxn那么先手必胜(先手一直取maxn堆即可).
但是如果maxn<=sum-maxn,选手就需要避免出现操作后maxn>sum-maxn的情况,此时分两种情况:
- maxn堆可取,此时取maxn,此时两种情况:
1.1 maxn不变,那么此时一定只有两堆,后手必胜.
1.2 maxn-1,此时参考下面不等式,仍维持不等式<= - maxn不可取,那么上一个人最优解一定取maxn,此时不等式变为:
此时后手取一个非最大堆,仍然维持<=不变.所以此时胜负取决于sum的奇偶,同时也对应1.1
Code
#include <iostream>
#include <cstring>
using namespace std;
int n;
int main()
{
int T;
scanf("%d",&T);
while(T--)
{
scanf("%d",&n);
int sum= 0,maxn = 0;
for(int i=1;i<=n;i++)
{
int x; scanf("%d",&x);
sum+=x;
maxn = max(maxn,x);
}
if(maxn*2>sum||sum%2) puts("T");
else puts("HL");
}
return 0;
}