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;
}