题目:https://www.luogu.org/problemnew/show/P2148

SG函数+找规律。

普通地用SG函数做。

每两堆是一个独立问题。因为虽然有可能一个人在同一组里连续操作2次,但操作一次一定会把一个必败状态改为必胜状态,不会需要连续操作两次。

关键是怎么快速求SG函数。

打表找规律:

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int sg[][];
void dfs(int x,int y)
{
if(sg[x][y]!=-)return;
int sum=;
for(int i=;i<x;i++)
{
dfs(i,x-i);
sum|=(<<sg[i][x-i]);
}
for(int i=;i<y;i++)
{
dfs(i,y-i);
sum|=(<<sg[i][y-i]);
}
for(int i=;i<=;i++)
if((sum&(<<i))==)
{
sg[x][y]=i;sg[y][x]=i;
return;
}
}
int main()
{
memset(sg,-,sizeof sg);
sg[][]=;
for(int i=;i<=;i++)
{
for(int j=;j<=;j++)
{
dfs(i,j);
printf("%3d",sg[i][j]);
}
printf("\n");
}
return ;
}

然后发现 i 和 j 的规律:

  SG=1:i % 2 ==1 && j % 2 ==1;

  SG=2:i % 4 == 1,2 && j % 4 == 1,2;

  SG=3:i % 8 == 1,2,3,4 && j % 8 == 1,2,3,4;

  ……

所以有了那个log的算法。

仔细一看,那个就是求 i 和 j 的第一个公共0在第几位,所以又有了O(1)的式子。

但是那个O(1)的式子有一个点过不去,是把NO输出成YES,不知何故。

#include<iostream>
#include<cstdio>
#include<cstring>
#define ll long long
using namespace std;
const ll N=2e4+;
ll T,n,a[],sum;
ll sg(ll a,ll b)
{
for(ll i=,tmp=;;i++,tmp<<=)
if((a-)%tmp<(tmp>>)&&(b-)%tmp<(tmp>>))
return i;
// ll k=((a-1)|(b-1));
// k=((k+1)&(-k-1));
// return k-1;
}
int main()
{
scanf("%lld",&T);
while(T--)
{
scanf("%lld",&n);sum=;
for(ll i=;i<=n;i++)
{
scanf("%lld",&a[i&]);
if(!(i&))sum^=sg(a[],a[]);
}
if(sum)printf("YES\n");
else printf("NO\n");
}
return ;
}

最新文章

  1. WebService -- Java 实现之 CXF ( 添加系统预定义的拦截器)
  2. SqlHelper类
  3. Hibernate的Annotation注解
  4. javascript时间的一些问题
  5. 【URAL 1486】Equal Squares
  6. vb 和vb.net的区别
  7. 判断微信内置浏览器的UserAgent
  8. Java实现的 线程池
  9. [DEEP LEARNING An MIT Press book in preparation]Linear algebra
  10. 2014辛星完全解读html第五节
  11. java利用poi导出数据到excel
  12. C#计算两个文件的相对目录算法
  13. 2019.04.23 Scrapy框架
  14. BluePrism初尝
  15. vue实现一个简易Popover组件
  16. 用Nginx给网站做一个简单的防盗链
  17. verilog HDL -模块代码基本结构
  18. SpringMVC+Thymeleaf +HTML的简单框架
  19. thymeleaf 字符串的拼接
  20. JS security

热门文章

  1. 关于Redis命令keys在性能方面的说明
  2. 20145219《网络对抗》Web基础
  3. NOI导刊2009 提高一
  4. 组学航母----OMICtools
  5. git 撤销
  6. Intel Caffe 与原生Caffe
  7. Java IO流-合并流
  8. Android数据库升级不丢失数据解决方案
  9. gradle ssh 插件
  10. Window 7 平台的IE11浏览器预览版发布