CF #658 Div2 1382B Sequential Nim

博弈论问题
思路:
当a[i]>1 先手的人可以选择自己成为 先手 还是 后手;
当a[i]=1 先后手一定变化。
那么只要有了a[i]>1的情况,则此时的先手就把握住了主动权(选择是否成为后手,还是保持先手。即一定能够获胜)
——先手必胜。只是需要判断确定主动权(有了a[i]>1)那时,谁是先手即可。

#include 
using namespace std;

const int maxn=1e5+7;
unsigned long long a[maxn];

int main()
{
	int test;
	cin>>test;
	while(test--){
		int n, flag=1;  // 开局a是先手
		cin>>n;
		for(int i=0; i<n; i++) cin>>a[i];
		for(int i=0; i<n-1; i++){  // 最后一堆先手能控场,不会先后手互换
            if(a[i]>1) break;  // 只要有了>1的情况,此时的先手必胜
            if(a[i]==1) flag=-flag;  // 还没有>1时,=1使先后手互换
		}
		if(flag==1) cout<<"First"<<endl;
		else cout<<"Second"<<endl;
	}

	return 0;
}

你可能感兴趣的:(2020暑假补题记录)