zoukankan      html  css  js  c++  java
  • Game on Plane(博弈 SG)

    You are given NN points on a plane. These points are precisely the set of vertices of some regular NN-gon. Koosaga, an extreme villain, is challenging you with a game using these points. You and Koosaga alternatively take turns, and in each turn, the player

    1. chooses two of the given points, then
    2. draws the line segment connecting the two chosen points.

    Also, the newly drawn line segment must not intersect with any of the previously drawn line segments in the interior. It is possible for two segments to meet at their endpoints. If at any point of the game, there exists a convex polygon consisting of the drawn line segments, the game ends and the last player who made the move wins.

    Given the integer NN, Koosaga is letting you decide who will move first. Your task is decide whether you need to move first or the second so that you can win regardless of Koosaga's moves.

    Input

    The input consists of many test cases. The first line contains an integer TT (1T50001≤T≤5000), the number of test cases. Each of the following TTtest cases is consisted of one line containing the integer NN (3N50003≤N≤5000).

    Output

    For each test case, print one line containing the string First if you need to move first or Secondif you need to move second so that you can win regardless of Koosaga's moves.

    Example

    Input
    2
    3
    5
    Output
    First
    Second
     1 #include <bits/stdc++.h>
     2 
     3 using namespace std;
     4 
     5 int sg[5005], vis[5005];
     6 
     7 void find_sg(int n)
     8 {
     9     int i, j;
    10     memset(sg, 0, sizeof(sg));
    11     for(i=1;i<=n;i++)
    12     {
    13         memset(vis, 0, sizeof(vis));
    14         for(j=0;j<=i-2;j++)
    15         {
    16             vis[sg[j] ^ sg[i-j-2]] = 1;
    17         }
    18         for(j=0;j<=n;j++)
    19         {
    20             if(vis[j]==0)
    21             {
    22                 sg[i] = j;
    23                 break;
    24             }
    25         }
    26     }
    27 }
    28 
    29 int main()
    30 {
    31     int t, n;
    32     find_sg(5005);
    33     cin >> t;
    34     while(t--)
    35     {
    36         cin >> n;
    37         if(sg[n]) cout << "First" << endl;
    38         else cout << "Second" << endl;
    39     }
    40     return 0;
    41 }
     
     
     
  • 相关阅读:
    vue中sessionStorage的使用
    SQLserver将查询的字段中的数据 拼接成字符串用逗号隔开
    vue中引入百度地图
    已拦截跨源请求:同源策略禁止读取位于XXX的远程资源。(原因:CORS 头缺少 'Access-Control-Allow-Origin'
    前台调用微信接口成功还报Network Error
    SpringBoot获得application.properties中数据的几种方式
    设置session销毁时间
    Linux基本命令-ls
    Linux基础命令-cd
    Linux基础命令-mkdir
  • 原文地址:https://www.cnblogs.com/0xiaoyu/p/11331574.html
Copyright © 2011-2022 走看看