N个平面,每个平面有ni个点 两个人玩游戏,划线,他们可以划任意一个平面的两个点,有以下要求:两个人划得线不能交叉,不要划已经划过的线,如果一个平面被划了一个空心的三角形,那么这个平面就不能继续划线了。Carol先来,两个人轮着画,谁没线划了就输了,问你最后谁赢。

一个平面上连接点时,不能连接已经有边的顶点,因为对方只需要再连接一次就可以组成一个三角形了

SG[i] i表示剩余没连线的点

0,1个点都是先手必败 SG=0 2,3个点先手必胜 SG[2] = 1 SG[3] = 1

假如 一个平面有4个点 则有以下后继状态
状态1 剩余的两点在已划线的同一侧 SG[0]^SG[2] = 1
状态2 剩余的两点分别在已划线的两侧 SG[1]^SG[1] = 0
所以SG[4] = 2 ;

打表后发现 前面是无序的 后面的SG值会出现长度为34的循环节

Sample Input
2 //T
1 //n
2 //每个平面有多少点
2
2 2

Sample Output
Carol
Dave

 # include <iostream>
# include <cstdio>
# include <cstring>
# include <algorithm>
# include <string>
# include <cmath>
# include <queue>
# include <list>
# define LL long long
using namespace std ; const int MAXN = ;
int sg[MAXN];
bool vis[MAXN];
int mex(int x)
{ if(sg[x]!=-)return sg[x];
if(x == )return sg[x] = ;
if(x == )return sg[x] = ;
if(x == )return sg[x] = ;
if(x == )return sg[x] = ;
memset(vis,false,sizeof(vis));
for(int i = ;i < x-;i++)
vis[mex(i)^mex(x-i-)] = true;
for(int i = ;;i++)
if(!vis[i])
return sg[x] = i;
} int SG(int x)
{
if(x <= )return sg[x];
else
{
x %= ;
x += *;
return sg[x];
}
} int main()
{
//freopen("in.txt","r",stdin);
//freopen("out.txt","w",stdout);
memset(sg,-,sizeof(sg));
for(int i = ;i <= ;i++)
{
sg[i] = mex(i);
}
int T;
int n;
int a;
scanf("%d",&T);
while(T--)
{
scanf("%d",&n);
int sum = ;
for(int i = ;i < n;i++)
{
scanf("%d",&a);
sum ^= SG(a);
}
if(sum)printf("Carol\n");
else printf("Dave\n");
}
return ;
}

最新文章

  1. 【Alpha版本】冲刺-Day6
  2. curl post传递json数据
  3. MLlib--FPGrowth算法
  4. 微信开发中access_token,js_ticket,时间戳,签名生成工具
  5. 小程序蓝牙BLE——自动连接设备(手环)
  6. unity 中UGUI制作滚动条视图效果(按钮)
  7. quartz获取缓存中所有运行中的Job
  8. JAVA记录-redis缓存机制介绍(二)
  9. 【黑金原创教程】【FPGA那些事儿-驱动篇I 】实验五:按键模块④ &mdash; 点击,长点击,双击
  10. MySql.Data.MySqlClient连接MySql
  11. XiaoKL学Python(E)Generator Expressions
  12. dom操作------操作元素属性的若干方法
  13. OS X 10.11:如何完全停用Time Machine。
  14. length-of-last-word 最后一个单词的长度
  15. 01 Go 1.1 Release Notes
  16. Scrapy项目之User timeout caused connection failure(异常记录)
  17. AI落地企业业务的一些问题
  18. Mysql进阶-day1
  19. Linux 安装Zookeeper&lt;单机版&gt;(使用Mac远程访问)
  20. springmvc值传递

热门文章

  1. 利用ansible来做kubernetes 1.10.3集群高可用的一键部署
  2. Java DataSource
  3. 关于720p和1080p观看距离和效果
  4. Redis总体 概述,安装,方法调用
  5. Nginx location 配置用法及正则例子
  6. ArchLinux升级后deadbeef无法正常启动的解决办法
  7. 转 -- ARM 中 LDR伪指令
  8. 博皮设计:HTML/CSS/Javascript 源码共享
  9. 在EF6.0中打印数据库操作日志
  10. log4net记录系统错误日志到文本文件用法详解(最新)