1397D. Stoned Game(博弈)

哎,这题死活想不出来…

只能加几分了,哎

. \color{Red}Ⅰ.考虑极端情况

, x 考虑特殊情况,当某一堆石子x超级多的时候

, 先手肯定一直拿这堆石子,那后手只能拿其他石子

x , , , 如果x大于其他石子和,那么后手没石子拿了,先手仍然拿这堆,先手赢

那一般情况怎么办呢?

s u m n 假设石子总数是sumn个

, , x 可以想到,最后分出胜负是因为只剩最后一堆石子,设剩下x个

x 谁先拿x这堆谁就赢了

x , x ( s u m n x ) 问题在于x是多少,如果知道x就知道(sumn-x)的奇偶性

x 这样就能知道谁最后拿了x

x = 5 , 9 假设x=5,那么总石子数被取到9的时候

x , , 接下来拿的人可以一直拿x这堆,就赢了,原因同\color{Red}{Ⅰ}

, 所以另一个人一定不会让这种事发生,在之前的决策就会不让这堆石子那么突出

x = 4 , 7 , 假设x=4,那么总石子数被取到7的时候,接下来取得人就必胜了

所以另一个人在之前的决策就不会让这堆石子这么突出

x 1 同理x只能等于1

1 ! ! \color{Red}也就是最后一定会拿得只剩下1颗石子啊!!

#include <bits/stdc++.h>
using namespace std;
#define int long long
const int maxn=2e5+10;
int t,n,a[maxn],b[maxn];
signed main()
{
	cin >> t;
	while( t-- )
	{
		cin >> n;
		int maxx=0,sumn=0;
		for(int i=1;i<=n;i++)
		{
			cin >> a[i];
			sumn+=a[i];
			maxx=max(maxx,a[i]);
		}
		if( maxx>(sumn-maxx) )	cout << "T\n";
		else
		{
			if( sumn%2==1 )	cout << "T\n";
			else	cout << "HL\n";
		}
	}
}

猜你喜欢

转载自blog.csdn.net/jziwjxjd/article/details/108313775