CF1396B Stoned Game(思路題)

如果存在一堆石子個數大於剩餘所有堆的的石子總數,那麼先手佔據此堆石子,先手勝。

否則,考慮最終狀態必定只有一堆石子,現證明雙方都可以通過設定操作策略爲取走目前可取的石子最多的那堆做到最後一堆石子被拿乾淨:

假設不被拿乾淨,必定是出現了最多石子的那堆石子數目大於其他之和的狀態(例如最終狀態),逆推回去可以發現每兩次取石子就有一個人取了這堆,逆推至初始狀態與“否則”矛盾,不成立。

只需判斷總石子數奇偶即可。

#include<cstdio>
#include<iostream>
using namespace std;
int T,n;
int a[1005],maxn,pos,sum;
int main(){
	scanf("%d",&T);
	while(T--){
		scanf("%d",&n);
		sum=0,maxn=0,pos=0;
		for(int i=1;i<=n;i++){
			scanf("%d",&a[i]);
			if(maxn<a[i]){
				maxn=a[i];
				pos=i;
			}
		}
		for(int i=1;i<=n;i++){
			if(i==pos) continue;
			sum+=a[i];
		}
		if(a[pos]>sum){
			printf("T\n");
		}
		else{
			if((sum+a[pos])&1) printf("T\n");
			else printf("HL\n");
		}
	}
	return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章