Stoned Game CodeForces - 1396B

原题链接
考察:博弈论
又到了我最喜欢的死活推不出规律的环节(.
思路:
  对于n个石子堆,假定堆最大值为maxn,和为sum,如果maxn>sum-maxn那么先手必胜(先手一直取maxn堆即可).
  但是如果maxn<=sum-maxn,选手就需要避免出现操作后maxn>sum-maxn的情况,此时分两种情况:

  1. maxn堆可取,此时取maxn,此时两种情况:
    1.1 maxn不变,那么此时一定只有两堆,后手必胜.
    1.2 maxn-1,此时参考下面不等式,仍维持不等式<=
  2. maxn不可取,那么上一个人最优解一定取maxn,此时不等式变为:

\[2*(maxn-1)<=sum-1 \]

\[2*maxn<=sum+1 \]

\[maxn<=sum+1-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;
}

posted @ 2021-06-08 02:48  acmloser  阅读(68)  评论(0编辑  收藏  举报