【题目链接】 http://codeforces.com/problemset/problem/786/A

【题目大意】

  有两个人,每个人有一个数集,里面有一些数,现在有一个环,有个棋子放在1,
  有个不确定位置的终点,两个人轮流从自己的数集中选择一个数,作为这个棋子移动的步数
  问终点在不同位置,不同人先手的时候谁能赢,或者游戏陷入循环

【题解】 

  我们从st_0_0=st_1_0=0开始倒着推导,
  如果一个状态是必败态,那么它的前继节点一定是必胜态
  如果一个点的所有后继都是必胜态,那么这个节点一定是必败态。
  每当一个点被其必胜后继推导到,那么其度数减一,当度数为0时则表示其为必败态
  我们根据这些结论倒着推导每个状态的答案并记录,最后按顺序输出即可。

【代码】

#include <cstdio>
#include <vector>
#include <cstring>
#include <string>
using namespace std;
const int N=100010;
int n,sg[2][N],d[2][N],k,x;
vector<int> g[2];
int dfs(int k,int pos,int v){
int &ret=sg[k][pos];
if(~ret)return ret;
ret=v;
if(v==0){
for(int i=0;i<g[k^1].size();i++){
int x=g[k^1][i];
int j=(pos+n-x)%n;
if(j==0)continue;
dfs(k^1,j,1);
}
}else{
for(int i=0;i<g[k^1].size();i++){
int x=g[k^1][i];
int j=(pos+n-x)%n;
if(j==0)continue;
if(--d[k^1][j]==0)dfs(k^1,j,0);
}
}return ret;
}
int main(){
scanf("%d",&n);
for(int i=0;i<2;i++){
scanf("%d",&k);
g[i].clear();
while(k--){
scanf("%d",&x);
g[i].push_back(x);
}for(int j=1;j<n;j++)d[i][j]=g[i].size();
}memset(sg,-1,sizeof(sg));
dfs(0,0,0);
dfs(1,0,0);
string s[3]={"Loop","Lose","Win"};
for(int k=0;k<2;k++){
for(int i=1;i<n;i++){
printf("%s%c",s[sg[k][i]+1].c_str(),i+1==n?'\n':' ');
}
}return 0;
}

最新文章

  1. Javascript常用方法函数收集(二)
  2. Lua 学习笔记(一)环境搭建
  3. C#向文本文件中写入日志
  4. [转] GitHub上README.md教程
  5. WebApi与手机客户端通信安全机制
  6. Scala 深入浅出实战经典 第54讲:Scala中复合类型实战详解
  7. YUV YCbCr
  8. DXUT初步理解
  9. Maven打包可执行Jar包方式
  10. java 23 种设计模式
  11. C#获取本周第一天和最后一天
  12. maven项目 在eclipse,InteliJ IDEA中的一些问题
  13. asp.net 使用rabbitmq事例
  14. CCF-20170903-JSON查询
  15. dp题
  16. Harmonic Value Description HDU - 5916
  17. 树莓派Raspberry Pi zero w无线联网实测
  18. PID参数调整的口诀
  19. 用 Python 快速实现 HTTP 和 FTP 服务器
  20. 多次grep 没有看到输出

热门文章

  1. SQL 学习小笔记
  2. 二进制转16进制JAVA代码
  3. Java并发(10)- 简单聊聊JDK中的七大阻塞队列
  4. cmd常用命令行
  5. 【BZOJ2820】YY的GCD [莫比乌斯反演]
  6. bzoj1833: [ZJOI2010]count 数字计数 &amp;&amp; codevs1359 数字计数
  7. ShadowBroker公开的SMB远程命令执行漏洞修复
  8. LeetCode 5:Given an input string, reverse the string word by word.
  9. 关于preempt_enable 和 preempt_disable 【转】
  10. 解决Eclipse明明有错误,却不能显示错误红叉的方法,eclipse不能显示错误