筱瑪愛遊戲

筱瑪愛遊戲

題意:兩個人輪流從一個集合裏取一個數放到另外一個集合裏,如果使得這個集合存在一個子集異或和爲0則📕。問最後是先手贏還是後手。

思路:子集異或和不爲0這不是跟線性基的性質很像嗎,那麼我們把原數組構造一個線性基,判斷能插入到線性基裏的個數,如果數量爲奇數那麼是先手贏,否則後手贏。

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll a[70];
int insert(ll x){
	for(int i=61;i>=0;i--){
		if(x&(1ll<<i)){
			if(!a[i]){
				a[i]=x;
				return 1;
			}
			x^=a[i];
		}
	}
	return 0;
}
int main(){
	int n;
	ll x;
	scanf("%d",&n);
	int ans=0;
	for(int i=0;i<n;i++){
		scanf("%lld",&x);
		ans^=insert(x);
	} 
	if(ans)
		puts("First");
	else puts("Second");
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章