CF1396B Stoned Game

传送门


博弈论小题,练练手。


题面:\(n\)堆石子,两人轮流取,每次取一个,但不能取对手上次取过的那一堆,问在两人都采用最优策略时,先手必胜还是先手必败。


\(\sum a_i=S\),分两种情况讨论:

  1. 如果\(\exist a_i > \lfloor\frac{S}{2} \rfloor\),那么先手必胜。因为先手可以一直取这一堆石子,而后手就一直不能取这一堆石子。那么当后手把其他石子都取完了后,\(a_i\)这堆石子还剩,因此先手必胜。

  2. \(\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;
}
posted @ 2021-10-17 14:02  mrclr  阅读(22)  评论(0编辑  收藏  举报