http://www.lydsy.com/JudgeOnline/problem.php?id=3576 (题目链接)

题意

  给出一个数$F$,然后$n$堆石子,每次操作可以把一堆不少于$F$的石子分成$m$堆,$m$是玩家任选的不少于$2$的正整数,这$m$堆石子中最多的一堆与最少的一堆之差不超过$1$,问是否存在先手必胜。

Solution

  对每一个子游戏考虑如何求解$SG$函数。

  假设当前一堆中有$i$石子,我们想把它分成$j$堆,那么石子数为$k=\lfloor{i/j}\rfloor+1$的有$x=i-j*k$堆,石子数为$k$的有$y=i-x$堆。而此时的$SG[i]=[(x\&1)*SG[k+1]]~XOR~[(y\&1)*SG[k]]$。考虑到$k$的取值只有$\sqrt{i}$种,我们可以枚举$j$,那么怎么确定$x,y$的奇偶性呢。$x$的奇偶性只与$j$有关,而一旦$x$确定,$y$就确定了。所以$x,y$的奇偶性只有$2$种情况,分开讨论一下就好了。

代码

// bzoj3576
#include<algorithm>
#include<iostream>
#include<cstdlib>
#include<cstring>
#include<cstdio>
#include<cmath>
#include<queue>
#define LL long long
#define inf (1ll<<60)
#define Pi acos(-1.0)
#define free(a) freopen(a".in","r",stdin),freopen(a".out","w",stdout);
using namespace std; const int maxn=100010;
int T,F,n,SG[maxn],v[maxn]; int main() {
scanf("%d%d",&T,&F);
for (int i=0;i<F;i++) SG[i]=0;
for (int i=F;i<=100000;i++) {
for (int k,pos,j=2;j<=i;j=pos+1) {
k=i/j;pos=i/k;
int x=i-k*j,y=j-x;
v[((x&1)*SG[k+1])^((y&1)*SG[k])]=i;
if (j+1<=min(pos,i)) {
x=i-k*(j+1),y=j+1-x;
v[((x&1)*SG[k+1])^((y&1)*SG[k])]=i;
}
}
for (int j=0;;j++) if (v[j]!=i) {SG[i]=j;break;}
//printf("%d ",SG[i]);
}
while (T--) {
scanf("%d",&n);
int ans=0;
for (int x,i=1;i<=n;i++) {
scanf("%d",&x);
ans^=SG[x];
}
printf(ans ? "1" : "0");
if (T) printf(" ");
}
return 0;
}

最新文章

  1. 火狐下white-space: nowrap对float的影响
  2. python3 黑板客爬虫闯关游戏(二)
  3. fir.im Weekly - 人人都需要的 IT 技能图谱
  4. Tomcat8访问管理页面localhost出现:403 Access Denied
  5. Win10如何隐藏Windows Defender任务栏图标
  6. Sticks_dfs
  7. Linux下的grep搜索命令详解(二)
  8. Tomcat7.0 start Could not find the main class: org.apache.catalina.startup.Bootstrap.
  9. itextSharp 对pdf的每个页面添加footer/header
  10. 201521123117 《Java程序设计》第5周学习总结
  11. 页面设计-数据列表 DataGrid
  12. 远程服务调用(RMI)
  13. Python openpyxl : Excel 文档简单操作
  14. StringBuilder与String有哪些区别?
  15. 解决idea创建Maven项目卡在running tmp archetypexxxtmp
  16. python在图片上写汉字
  17. tf.contrib.rnn.core_rnn_cell.BasicLSTMCell should be replaced by tf.contrib.rnn.BasicLSTMCell.
  18. 数据库(mysql)
  19. 【转】四款经典3.7v锂电池充电电路图详解
  20. 代码审计之DocCms漏洞分析

热门文章

  1. sql语句——根据身份证号提取省份、出生日期、年龄、性别。
  2. mysql基础(三)——中级查询
  3. JVM技术周报第1期
  4. MyBatis的一级缓存和二级缓存简介笔记
  5. centos7 部署LNMP
  6. cocos2dx渲染架构
  7. 利用可道云kodexplorer在树莓派raspbian上搭建私有云网盘
  8. 一些常用SQL语句大全
  9. 从两个设计模式到前端MVC-洪宇
  10. Java实验报告(实验二)