CF1396B Stoned Game
传送门
博弈论小题,练练手。
题面:\(n\)堆石子,两人轮流取,每次取一个,但不能取对手上次取过的那一堆,问在两人都采用最优策略时,先手必胜还是先手必败。
令\(\sum a_i=S\),分两种情况讨论:
-
如果\(\exist a_i > \lfloor\frac{S}{2} \rfloor\),那么先手必胜。因为先手可以一直取这一堆石子,而后手就一直不能取这一堆石子。那么当后手把其他石子都取完了后,\(a_i\)这堆石子还剩,因此先手必胜。
-
\(\forall a_i \leqslant \lfloor \frac{S}{2} \rfloor\),那么当\(S\)为偶数的时候,先手必败,否则先手必胜。先考虑\(n\)为偶数的情况:我们可以做一个完美匹配:将所有石子按每一堆依次标号,那么标号为\(x\)和\(x + \lfloor \frac{S}{2} \rfloor\)的两颗石子必然不在一堆里,因此先手取\(x\),后手就可以取\(x + \lfloor \frac{S}{2} \rfloor\),直到后手把最后一棵石子取完。而对于\(S\)是奇数的情况,先手任取一颗石子,就变成了\(S\)是偶数的情况,因此先手必胜。
{
int T = read();
while(T--)
{
int n = read();
int sum = 0, Max = 0;
for(int i = 1; i <= n; ++i)
{
int x = read();
sum += x, Max = max(Max, x);
}
puts((Max > sum / 2 || (sum & 1)) ? "T" : "HL");
}
return 0;
}