题目链接:http://codeforces.com/gym/101350/problem/E
题目大意:给你一个长度为n的方格,方格上面都被染色成了白色。每次染色都是选择白色的,假设目前选择的这块白色(白色联通块)的长度为L,每次都只能选择<=(L+1)/2的素数染色。问谁赢?
思路:果然博弈不会啊,感谢这位神牛:链接
当n=2||n=3先手必败
其余的n必胜,n=1就不解释了。当n>=4的时候,如果是奇数,那么每次都取出中间两个,如果是偶数,每次都取出中间三个,然后对称取即可。
//看看会不会爆int!数组会不会少了一维! //取物问题一定要小心先手胜利的条件 #include <bits/stdc++.h> using namespace std; #pragma comment(linker,"/STACK:102400000,102400000") #define LL long long #define ALL(a) a.begin(), a.end() #define pb push_back #define mk make_pair #define fi first #define se second #define haha printf("haha ") int main(){ int t; cin >> t; while (t--){ int n; scanf("%d", &n); if (n == 2 || n == 3) puts("second"); else puts("first"); } return 0; }