zoukankan      html  css  js  c++  java
  • gym/102059/problem/I. Game on Plane SG函数做博弈

    传送门:

    题意:

      给定一个正n边形的点。双方轮流连点成线,要求所画的线不能与之前的线相交。当某个人连成一个回路,这个人就输了。问先手必胜还是后手必胜。

    思路:

      SG函数,因为一条线相当于把图劈成了两半,所以每次用异或运算推过来。

    /*
    * @Author: chenkexing
    * @Date:   2019-01-13 16:17:46
    * @Last Modified by:   chenkexing
    * @Last Modified time: 2019-01-15 18:33:24
    */
    
    #include <algorithm>
    #include  <iterator>
    #include  <iostream>
    #include   <cstring>
    #include   <cstdlib>
    #include   <iomanip>
    #include    <bitset>
    #include    <cctype>
    #include    <cstdio>
    #include    <string>
    #include    <vector>
    #include     <stack>
    #include     <cmath>
    #include     <queue>
    #include      <list>
    #include       <map>
    #include       <set>
    #include   <cassert>
    
    using namespace std;
    #define lson (l , mid , rt << 1)
    #define rson (mid + 1 , r , rt << 1 | 1)
    #define debug(x) cerr << #x << " = " << x << "
    ";
    #define pb push_back
    #define pq priority_queue
     
     
    
    typedef long long ll;
    typedef unsigned long long ull;
    //typedef __int128 bll;
    typedef pair<ll ,ll > pll;
    typedef pair<int ,int > pii;
    typedef pair<int,pii> p3;
     
    //priority_queue<int> q;//这是一个大根堆q
    //priority_queue<int,vector<int>,greater<int> >q;//这是一个小根堆q
    #define fi first
    #define se second
    //#define endl '
    '
     
    #define OKC ios::sync_with_stdio(false);cin.tie(0)
    #define FT(A,B,C) for(int A=B;A <= C;++A)  //用来压行
    #define REP(i , j , k)  for(int i = j ; i <  k ; ++i)
    #define max3(a,b,c) max(max(a,b), c);
    #define min3(a,b,c) min(min(a,b), c);
    //priority_queue<int ,vector<int>, greater<int> >que;
     
    const ll mos = 0x7FFFFFFF;  //2147483647
    const ll nmos = 0x80000000;  //-2147483648
    const int inf = 0x3f3f3f3f;
    const ll inff = 0x3f3f3f3f3f3f3f3f; //18
    const int mod = 1e9+7;
    const double esp = 1e-8;
    const double PI=acos(-1.0);
    const double PHI=0.61803399;    //黄金分割点
    const double tPHI=0.38196601;
     
     
    template<typename T>
    inline T read(T&x){
        x=0;int f=0;char ch=getchar();
        while (ch<'0'||ch>'9') f|=(ch=='-'),ch=getchar();
        while (ch>='0'&&ch<='9') x=x*10+ch-'0',ch=getchar();
        return x=f?-x:x;
    } 
    /*-----------------------showtime----------------------*/
                      const int maxn = 5009;
                      int sg[maxn],s[maxn];
                      void getsg(int n){
    
                            for(int i=1; i<=n; i++){
                                  memset(s, 0, sizeof(s));
                                 for(int j=0; j<=i-2; j++){
                                        s[(sg[j] ^ sg[i-j-2])] = 1;
                                 } 
                                  for(int j=0; ; j++){
                                        if(!s[j]) {
                                              sg[i] = j;
                                              break;
                                        }
                                  }
                            }
                      }
    int main(){       
                      int T;
                      getsg(5000);
                      scanf("%d", &T);
                      while(T--){
                            int n;      scanf("%d", &n);
                            if(sg[n])puts("First");
                            else puts("Second");
                      }
    
                      return 0;
    }
  • 相关阅读:
    POJ 3268 Silver Cow Party (Dijkstra)
    怒学三算法 POJ 2387 Til the Cows Come Home (Bellman_Ford || Dijkstra || SPFA)
    CF Amr and Music (贪心)
    CF Amr and Pins (数学)
    POJ 3253 Fence Repair (贪心)
    POJ 3069 Saruman's Army(贪心)
    POJ 3617 Best Cow Line (贪心)
    CF Anya and Ghosts (贪心)
    CF Fox And Names (拓扑排序)
    mysql8.0的新特性
  • 原文地址:https://www.cnblogs.com/ckxkexing/p/10274037.html
Copyright © 2011-2022 走看看