传送门:

题意:

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

思路:

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

  1. /*
  2. * @Author: chenkexing
  3. * @Date: 2019-01-13 16:17:46
  4. * @Last Modified by: chenkexing
  5. * @Last Modified time: 2019-01-15 18:33:24
  6. */
  7.  
  8. #include <algorithm>
  9. #include <iterator>
  10. #include <iostream>
  11. #include <cstring>
  12. #include <cstdlib>
  13. #include <iomanip>
  14. #include <bitset>
  15. #include <cctype>
  16. #include <cstdio>
  17. #include <string>
  18. #include <vector>
  19. #include <stack>
  20. #include <cmath>
  21. #include <queue>
  22. #include <list>
  23. #include <map>
  24. #include <set>
  25. #include <cassert>
  26.  
  27. using namespace std;
  28. #define lson (l , mid , rt << 1)
  29. #define rson (mid + 1 , r , rt << 1 | 1)
  30. #define debug(x) cerr << #x << " = " << x << "\n";
  31. #define pb push_back
  32. #define pq priority_queue
  33.  
  34. typedef long long ll;
  35. typedef unsigned long long ull;
  36. //typedef __int128 bll;
  37. typedef pair<ll ,ll > pll;
  38. typedef pair<int ,int > pii;
  39. typedef pair<int,pii> p3;
  40.  
  41. //priority_queue<int> q;//这是一个大根堆q
  42. //priority_queue<int,vector<int>,greater<int> >q;//这是一个小根堆q
  43. #define fi first
  44. #define se second
  45. //#define endl '\n'
  46.  
  47. #define OKC ios::sync_with_stdio(false);cin.tie(0)
  48. #define FT(A,B,C) for(int A=B;A <= C;++A) //用来压行
  49. #define REP(i , j , k) for(int i = j ; i < k ; ++i)
  50. #define max3(a,b,c) max(max(a,b), c);
  51. #define min3(a,b,c) min(min(a,b), c);
  52. //priority_queue<int ,vector<int>, greater<int> >que;
  53.  
  54. const ll mos = 0x7FFFFFFF; //
  55. const ll nmos = 0x80000000; //-2147483648
  56. const int inf = 0x3f3f3f3f;
  57. const ll inff = 0x3f3f3f3f3f3f3f3f; //
  58. const int mod = 1e9+;
  59. const double esp = 1e-;
  60. const double PI=acos(-1.0);
  61. const double PHI=0.61803399; //黄金分割点
  62. const double tPHI=0.38196601;
  63.  
  64. template<typename T>
  65. inline T read(T&x){
  66. x=;int f=;char ch=getchar();
  67. while (ch<''||ch>'') f|=(ch=='-'),ch=getchar();
  68. while (ch>=''&&ch<='') x=x*+ch-'',ch=getchar();
  69. return x=f?-x:x;
  70. }
  71. /*-----------------------showtime----------------------*/
  72. const int maxn = ;
  73. int sg[maxn],s[maxn];
  74. void getsg(int n){
  75.  
  76. for(int i=; i<=n; i++){
  77. memset(s, , sizeof(s));
  78. for(int j=; j<=i-; j++){
  79. s[(sg[j] ^ sg[i-j-])] = ;
  80. }
  81. for(int j=; ; j++){
  82. if(!s[j]) {
  83. sg[i] = j;
  84. break;
  85. }
  86. }
  87. }
  88. }
  89. int main(){
  90. int T;
  91. getsg();
  92. scanf("%d", &T);
  93. while(T--){
  94. int n; scanf("%d", &n);
  95. if(sg[n])puts("First");
  96. else puts("Second");
  97. }
  98.  
  99. return ;
  100. }

gym/102059/problem/I. Game on Plane SG函数做博弈的更多相关文章

  1. HDU 1848 Fibonacci again and again SG函数做博弈

    传送门 题意: 有三堆石子,双方轮流从某堆石子中去f个石子,直到不能取,问先手是否必胜,其中f为斐波那契数. 思路: 利用SG函数求解即可. /* * @Author: chenkexing * @D ...

  2. bzoj 1188 [HNOI2007]分裂游戏(SG函数,博弈)

    1188: [HNOI2007]分裂游戏 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 733  Solved: 451[Submit][Status ...

  3. HDU-1848-Fibonacci again and again(SG函数,博弈)

    链接: http://acm.hdu.edu.cn/showproblem.php?pid=1848 题意: 任何一个大学生对菲波那契数列(Fibonacci numbers)应该都不会陌生,它是这样 ...

  4. nyoj913 取石子(十) SG函数 + Nimm博弈

    思路: 第一堆:SG = n % 3; 第二堆:无规律,打表即可,用hash比set快很多; 第三堆:SG = n; 第四堆:无规律 第五堆:SG = n % 2; 第六堆:SG = n % (i + ...

  5. POJ 2425 A Chess Game 博弈论 sg函数

    http://poj.org/problem?id=2425 典型的sg函数,建图搜sg函数预处理之后直接求每次游戏的异或和.仍然是因为看不懂题目卡了好久. 这道题大概有两个坑, 1.是搜索的时候vi ...

  6. poj 3575 Crosses and Crosses(SG函数)

    Crosses and Crosses Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: 3063   Accepted: 11 ...

  7. 博弈论初步(SG函数)

    讲解见此博客https://blog.csdn.net/strangedbly/article/details/51137432 理解Nim博弈,基于Nim博弈理解SG函数的含义和作用. 学习求解SG ...

  8. SG函数博弈——poj2311

    关于SG函数的博弈 首先定义必败态 x : SG[x]=0 设任意一个状态y,到所有y能到达的状态连一条边,令这些后继为z y : SG[y]=mex(SG[z]) SG[y]==0 : y就是必败态 ...

  9. Gym 101246D Fire in the Country(dfs求SG函数)

    http://codeforces.com/gym/101246/problem/D 题意: 给定一个无向有环图,大火从1点开始,每个时间点与它相邻的点也将会着火,现在有两个人轮流操作机器人,机器人从 ...

随机推荐

  1. 【MySQL】ON DUPLICATE KEY UPDATE

    之前没用过这个操作,甚至没见过--最近接触到,而且还挺有用. 作用:若 KEY 不重复,则插入记录:否则更新记录. 单条操作: INSERT INTO table(a, b, c) VALUES (1 ...

  2. python log 设置

    # -*- coding: utf-8 -*- import loggingfrom logging.handlers import TimedRotatingFileHandler  # 按时间处理 ...

  3. 安装MySQL5.7 安装环境:CentOS7 64位 MINI版,

    安装环境:CentOS7 64位 MINI版,安装MySQL5.7 1.配置YUM源 在MySQL官网中下载YUM源rpm安装包:http://dev.mysql.com/downloads/repo ...

  4. JAVA课堂-动手动脑1

    一.Enum:一般用来表示一组相同类型的常量.对这些属性用常量的好处是显而易见的,不仅可以保证单例,且比较时候可以用”==”来替换equals,枚举对象里面的值都必须是唯一的. 代码: public  ...

  5. ajax定义与开发最简五步骤

    ajax是什么? a (async异步)  j (javascript)  a (and)  x (xml)即异步的javascript和xml ajax特点:异步 不刷新整个页面 (局部刷新) we ...

  6. 一文了解:Redis的RDB持久化

    一文了解:Redis的RDB持久化 Redis是内存数据库,为了保证数据不在故障后丢失,Redis需要将数据持久化到硬盘上. Redis持久化有两种方式:一种是快照,全量备份.一种是AOF方式,连续增 ...

  7. 10、二维数组的申请(test7.java)

    我个人认为,二维数组的构造就是在一位数组中存入一个地址,这个地址指向另一个一位数组,这样通过这种排列组合便构造成了二维数组. 二维数组的形状,有的时候二维数组看起来像是一个矩阵,所以一般情况下如果涉及 ...

  8. .netcore持续集成测试篇之Xunit数据驱动测试一

    系列目录 Nunit里提供了丰富的数据测试功能,虽然Xunit里提供的比较少,但是也能满足很多场景下使用了,如果数据场景非常复杂,Nunit和Xunit都是无法胜任的,有不少测试者选择自己编写一个数据 ...

  9. Spring入门(六):条件化的bean

    1. 概念 默认情况下,Spring中定义的bean在应用程序启动时会全部装配,不管当前运行的是哪个环境(Dev,QA或者Prod),也不管当前运行的是什么系统(Windows或者Linux),但有些 ...

  10. SQL中一些实用的快捷键

    Ctrl+A全选 快速选中一行: 若光标在这条语句末尾用Shift+Home 若光标在这条语句开头用Shift+End Ctrl+K+U快捷注释本行 Ctrl+K+C反注释 Ctrl+R  关闭下面的 ...