筱玛爱游戏——线性基
生活随笔
收集整理的這篇文章主要介紹了
筱玛爱游戏——线性基
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
鏈接:https://ac.nowcoder.com/acm/contest/946/E
來(lái)源:牛客網(wǎng)-----------------------------------------------------------------------------------------------
一.首先得先學(xué)“線性基”。
不知道的可以不用往下看了。
這里只說(shuō)下要用到的關(guān)于“線性基”的性質(zhì):線性基集合中的任何子集的異或和都不會(huì)為0
二.如果 插入的這個(gè)數(shù)的二進(jìn)制 第i位 為 1,而 線性基集合 的二進(jìn)制位數(shù)剛好沒(méi)有 第 i 位,
則說(shuō)明該數(shù)可以選,并且不會(huì)使得線性基集合子集
異或和 位 0 的情況出現(xiàn)。我們就可以統(tǒng)計(jì)一下有多少個(gè)數(shù)可以選的,然后根據(jù)可選個(gè)數(shù)判斷奇偶性就可以知道是先手還是后手贏了。
//#pragma comment(linker, "/STACK:1024000000,1024000000") //#pragma GCC optimize(2) //#include <bits/stdc++.h> #include <algorithm> #include <iostream> #include<sstream> #include<iterator> #include<cstring> #include<string> #include<cstdio> #include<cctype> #include<vector> #include<deque> #include<queue> #include<stack> #include<map> #include<list> #include<set>using namespace std; typedef double dou; typedef long long ll; typedef pair<int, int> pii;#define pai acos(-1.0) #define M 200005 #define inf 1e18 #define mod 1000000007 #define left k<<1 #define right k<<1|1 #define W(a) while(a) #define ms(a,b) memset(a,b,sizeof(a))ll num[M]; ll ans, n, m, t;int insert(ll x) {for (int i = 61; i >= 0; i--){if (x >> i & 1){if (!num[i])//如果線性基二進(jìn)制中沒(méi)有這一位,那就是可以選這個(gè)數(shù) {num[i] = x;return 1;//可選數(shù)+1 }x ^= num[i];}}return 0;//如果這個(gè)數(shù)的每一位都和線性基二進(jìn)制重合,那么就是不可以選的 }int main() {ios::sync_with_stdio(false);cin >> n;for (int i = 1; i <= n; i++){cin >> t;ans+=insert(t);//插入線性基 }if (ans&1) cout << "First" << endl;else cout << "Second" << endl;return 0; }
轉(zhuǎn)載于:https://www.cnblogs.com/caibingxu/p/11142183.html
總結(jié)
以上是生活随笔為你收集整理的筱玛爱游戏——线性基的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Linux(二)各种实用命令
- 下一篇: 华硕笔记本怎么进入bios设置光盘启动