思路:直接打表找sg函数的值,找规律,没有什么技巧

还想了很久的,把数当二进制看,再类讨二进制中1的个数是必胜或者必败状态。。。。

打表:

 // #pragma comment(linker, "/STACK:102c000000,102c000000")
#include <iostream>
#include <cstdio>
#include <cstring>
#include <sstream>
#include <string>
#include <algorithm>
#include <list>
#include <map>
#include <vector>
#include <queue>
#include <stack>
#include <cmath>
#include <cstdlib>
// #include <conio.h>
using namespace std;
#define clc(a,b) memset(a,b,sizeof(a))
#define inf 0x3f3f3f3f
#define lson l,mid,rt<<1
// #define rson mid+1,r,rt<<1|1
const int N = 1e5+;
const int M = 1e6+;
const int MOD = 1e9+;
#define LL long long
#define LB long double
// #define mi() (l+r)>>1
double const pi = acos(-);
const double eps = 1e-;
void fre(){freopen("in.txt","r",stdin);}
inline int read(){int x=,f=;char ch=getchar();while(ch>''||ch<'') {if(ch=='-') f=-;ch=getchar();}while(ch>=''&&ch<='') { x=x*+ch-'';ch=getchar();}return x*f;} int g[];
bool vis[];
int sg(int x){
if(g[x] != -) return g[x];
if(x == ) return ;
if(x == ) return ;
if(x == ) return ;
if(x == ) return ;
clc(vis,);
vis[]=;
for(int i = ; i < x; i++){
for(int j=; i+j<x; j++){
int t = ;
int a = sg(i), b = sg(j),c=sg(x-i-j);
t ^= a;
t ^= b;
t^=c;
vis[a] = vis[b] =vis[c]=;
vis[t] = ;
}
vis[g[i]]=;
}
for(int i = ;; i++) if(!vis[i])
return i;
}
int main(){
int n;
clc(g,-);
for(int i = ; i <= ; i++){
g[i] = sg(i);
printf("%d %d\n", i, g[i]);
}
return ;
}

代码:

 // #pragma comment(linker, "/STACK:102c000000,102c000000")
#include <iostream>
#include <cstdio>
#include <cstring>
#include <sstream>
#include <string>
#include <algorithm>
#include <list>
#include <map>
#include <vector>
#include <queue>
#include <stack>
#include <cmath>
#include <cstdlib>
// #include <conio.h>
using namespace std;
#define clc(a,b) memset(a,b,sizeof(a))
#define inf 0x3f3f3f3f
#define lson l,mid,rt<<1
// #define rson mid+1,r,rt<<1|1
const int N = 1e6+;
const int M = 1e6+;
const int MOD = 1e9+;
#define LL long long
#define LB long double
// #define mi() (l+r)>>1
double const pi = acos(-);
const double eps = 1e-;
void fre(){freopen("in.txt","r",stdin);}
inline int read(){int x=,f=;char ch=getchar();while(ch>''||ch<'') {if(ch=='-') f=-;ch=getchar();}while(ch>=''&&ch<='') { x=x*+ch-'';ch=getchar();}return x*f;} int sg(int x){
if(x%==) return x-;
if(x%==) return x+;
return x;
}
int main(){
int T,n;
scanf("%d",&T);
while(T--){
int sum=;
scanf("%d",&n);
for(int i=;i<=n;i++){
int x;
scanf("%d",&x);
sum^=sg(x);
}
printf("%s\n",sum?"First player wins.":"Second player wins.");
}
return ;
}

最新文章

  1. linux允许80端口通过
  2. [WinAPI] API 4 [注册][创建][消息][第一个框架类窗口]
  3. Vs 2013 单步调试 .net framework 中遇到的问题
  4. 泛型,迭代器,LinkedList&lt;E&gt;
  5. 设计模式 -- 组合模式 (Composite Pattern)
  6. webservice面试题
  7. C#安装Telnet
  8. 【集合】Java集合框架
  9. cplusplus标准库
  10. django restfulwork 源码剖析
  11. 1.汇编指令介绍(arm)
  12. vs code 设置工作区背景图片方法
  13. 利用padding-top/padding-bottom百分比,进行占位和高度自适应
  14. Excel2010取消隐藏的工作簿
  15. myeclipse使用小结
  16. BZOJ2958 序列染色
  17. 获取web项目中的webroot目录路径
  18. 用firefox获取html页面元素的Xpath
  19. 在windows上编译wireshark源代码
  20. C++ Primer(第五版)读书笔记 &amp; 习题解答 --- Chapter 3

热门文章

  1. MIT算法导论——第二讲.Solving Recurrence
  2. PHP裁剪图片
  3. Quartz所使用的表的说明
  4. 3、REST风格的URL
  5. android从应用到驱动之&mdash;camera(2)---cameraHAL的实现
  6. 一个小应用的dbcp和c3p0配置实例
  7. AsciiDoc Markup Syntax Summary
  8. heatmap.2
  9. Android开发之通过反射获取到挂断电话的API
  10. Junit单元测试的实例