原题: ZOJ 3666 http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3666

博弈问题。

题意:给你1~N个位置,N是最终点,1~N-1中某些格子能够移石头到另外一些指定的格子,1~N-1上有M个石头,位置不定,现在Alice和Bob要把这些石头全部移到N点,谁不能移则输,问先手必胜还是后手必胜。

做法:求出每个位置的SG函数值,然后将放石头的M个位置的SG函数值做异或,异或为0则Alice赢。这里讲坐标反转,1~N换成N-1~0,0点作为终点,更加直观。

代码:

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <vector>
using namespace std;
#define N 10007 int flag[N],step[N];
int sg[N];
vector<int> v[]; int mex(int x)
{
int i,ans = ;
memset(flag,,sizeof(flag));
for(i=;i<v[x].size();i++)
flag[sg[v[x][i]]] = ;
for(i=;;i++)
if(!flag[i])
return i;
} void setSG()
{
int i;
sg[] = ;
for(i=;i<=;i++)
sg[i] = mex(i);
} int main()
{
int n,i,j,m,q,c,x,k;
int cs = ;
while(scanf("%d",&n)!=EOF)
{
printf("Case %d:\n",cs++);
for(i=;i<;i++)
v[i].clear();
for(i=;i<n-;i++)
{
scanf("%d",&c);
for(j=;j<c;j++)
{
scanf("%d",&x);
v[n-i-].push_back(n-x);
}
}
setSG();
int res;
scanf("%d",&q);
while(q--)
{
scanf("%d",&m);
res = ;
while(m--)
{
scanf("%d",&k);
res ^= sg[n-k];
}
if(res)
puts("Alice");
else
puts("Bob");
}
}
return ;
}

最新文章

  1. 「LeetCode」全部题解
  2. Android开发自学笔记(Android Studio)—4.3ImageView及其子类
  3. 分页sql优化
  4. sublime中侧边栏字体大小的设置
  5. BZOJ4551: [Tjoi2016&amp;Heoi2016]树
  6. SQL Server数据库性能优化(二)之 索引优化
  7. Linux命令(21)查看文件的行数
  8. jQuery对html进行Encode和Decode
  9. Ubuntu 14.10 下卸载MySQL
  10. Asp.Net多线程用法1
  11. nodejs and socket.io and iisnode
  12. C#基于委托的带参数的消息传递设计
  13. C#实现文件批量重命名源码下载
  14. 解决Agent admitted failure to sign using the kye with ssh
  15. [gkk]传智-适配器设计模式,如同电源适配器
  16. 自己创建一个android studio在线依赖compile
  17. Flutter 卡在 package get 的解决办法
  18. SQL Server中sp_spaceused统计数据使用的空间总量不正确的原因
  19. MT【19】舒尔不等式设计理念及证明
  20. Android sharedUserId 和系统权限

热门文章

  1. servlet中的转发和重定向问题
  2. jquery.cookie.js 用法
  3. nginx跨域处理
  4. 【GOF23设计模式】装饰模式
  5. JS控制HTML元素的显示和隐藏
  6. 将内表通过TXT文本输出
  7. Oracle之自动收集统计信息
  8. SharePoint 2010 文档管理之点击次数
  9. Sharepoint学习笔记—习题系列--70-573习题解析 -(Q45-Q47)
  10. BeanFactory not initialized or already closed - call &#39;refresh&#39; before accessing beans解决办法