脑洞 博弈 E. Competitive Seagulls 2017 ACM Arabella Collegiate Programming Contest

题目链接: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;
}
View Code
原文地址:https://www.cnblogs.com/heimao5027/p/6827538.html