/*
CF786A - Berzerk
http://codeforces.com/contest/786/problem/A
博弈论
直接搜出NP状态图。记得要记忆化剪枝。
*
*/
#include <cstdio>
#include <cstring>
//#define tle
#ifdef tle
//#define test using namespace std;
const int Nmax=;
int now;
int is[][Nmax];
int n;
int s[][Nmax];
int tmp[][Nmax];
int k[];
#ifdef test
void watch()
{
for(int i=;i<=;i++)
{
printf("s[%d]:\n",i);
for(int j=;j<=n;j++)
printf("%d ",is[i][j]);
printf("\n");
}
}
#endif void work()
{
for(int j=;j<=;j++)
for(int i=;i<=k[j];i++)
{
int x=(n+-s[j][i])%n;
while(x<=)
x+=n;
is[j][x]=;
}
#ifdef test
watch();
#endif for(int t=;t<=;t++)
{
for(int ii=;ii<=;ii++)
for(int jj=;jj<=n;jj++)
tmp[ii][jj]=is[ii][jj];
for(int now=;now<=;now++)
for(int i=;i<=n;i++)
{
if(is[now][i]!=-)
continue;
int flag=;
for(int j=;j<=k[now];j++)
{
int x=(i+s[now][j])%n;
while(x<=)
x+=n;
if(is[now^][x]==)
{
is[now][i]=;
flag=;
break;
}
if(is[now^][x]==-)
flag=;//标记不是P态
}
if(!flag)
is[now][i]=;
#ifdef test
printf("is[%d][%d]:\n",now,i);
watch();
#endif }
int ff=;
for(int ii=;ii<=;ii++)
{
if(ff)
break;
for(int jj=;jj<=n;jj++)
if(tmp[ii][jj]!=is[ii][jj])
{
ff=;
break;
}
}
if(!ff)
break;
} } void init()
{
for(int i=;i<=n;i++)
is[][i]=is[][i]=-;
is[][]=is[][]=;
}
int main()
{
scanf("%d",&n);
for(int i=;i<=;i++)
{
scanf("%d",&k[i]);
for(int j=;j<=k[i];j++)
scanf("%d",&s[i][j]);
}
init();
work();
for(int t=;t<=;t++)
{
for(int i=;i<=n;i++)
{
if(i!=)
printf(" ");
if(is[t][i]==-)
printf("Loop");
else if(is[t][i]==)
printf("Lose");
else
printf("Win");
}
printf("\n");
}
}
#endif using namespace std;
const int Nmax=;
int now;
int is[][Nmax];
int n;
int s[][Nmax];
int tmp[][Nmax];
int k[]; void dfs(int now,int x,int sstatus)
{
if(is[now][x]!=-)//如果已经有状态了,返回
return;
is[now][x]=sstatus;
if(sstatus==)//如果当前点为必败态,则让与其相接的点为必胜态
{
for(int i=;i<=k[now^];i++)
{
int next=(x-s[now^][i])%n;
while(next<=)
next+=n;
dfs(now^,next,);
}
}
if(sstatus==)//如果当前点为必胜态,则让与其相接的点的非必胜态边个数-1
{
for(int i=;i<=k[now^];i++)
{
int next=(x-s[now^][i])%n;
while(next<=)
next+=n;
tmp[now^][next]--;//利用tmp数组记录当前相接的点的非必胜态个数来剪枝,如果相邻点都是必胜态,则当前点为必败态
if(!tmp[now^][next])
dfs(now^,next,);
}
}
} void init()
{
for(int i=;i<=n;i++)
is[][i]=is[][i]=-;
is[][]=is[][]=;
}
int main()
{
scanf("%d",&n);
for(int i=;i<=;i++)
{
scanf("%d",&k[i]);
for(int j=;j<=k[i];j++)
scanf("%d",&s[i][j]);
for(int j=;j<=n;j++)
tmp[i][j]=k[i];
}
init();
for(int j=;j<=;j++)
for(int i=;i<=k[j];i++)
{
int x=(n+-s[j][i])%n;
while(x<=)
x+=n;
dfs(j,x,);
}
for(int t=;t<=;t++)
{
for(int i=;i<=n;i++)
{
if(i!=)
printf(" ");
if(is[t][i]==-)
printf("Loop");
else if(is[t][i]==)
printf("Lose");
else
printf("Win");
}
printf("\n");
}
return ;
}

CF786A - Berzerk的更多相关文章

  1. [刷题]Codeforces 786A - Berzerk

    http://codeforces.com/problemset/problem/786/A Description Rick and Morty are playing their own vers ...

  2. Codeforces Round #406 (Div. 1) A. Berzerk 记忆化搜索

    A. Berzerk 题目连接: http://codeforces.com/contest/786/problem/A Description Rick and Morty are playing ...

  3. [vjudge contest15(xjoi)] C - Berzerk

    CodeForces - 787C Rick and Morty are playing their own version of Berzerk (which has nothing in comm ...

  4. cf786a

    title: CodeForces 786A Berzerk data: 2018-3-3 10:29:40 tags: 博弈论 bfs 无限 with draw copyright: true ca ...

  5. Codeforces 786 A. Berzerk

    题目链接:http://codeforces.com/problemset/problem/786/A 这个题出做$DIV2$的$C$以及$DIV1$的A会不会难了一点啊... 做法和题解并不一样,只 ...

  6. 【动态规划】Codeforces Round #406 (Div. 2) C.Berzerk

    有向图博弈问题. 能转移到一个必败态的就是必胜态. 能转移到的全是必胜态的就是必败态. 转移的时候可以用队列维护. 可以看这个 http://www.cnblogs.com/quintessence/ ...

  7. Codeforces 786A Berzerk(博弈论)

    [题目链接] http://codeforces.com/problemset/problem/786/A [题目大意] 有两个人,每个人有一个数集,里面有一些数,现在有一个环,有个棋子放在1, 有个 ...

  8. 【codeforces 787C】Berzerk

    [题目链接]:http://codeforces.com/contest/787/problem/C [题意] 给你怪物一开始所在的位置; 然后两人轮流操作; 可以选择让这个怪物前进自己的集合里面所拥 ...

  9. Codeforces Round #406 (Div. 1)

    B题打错调了半天,C题想出来来不及打,还好没有挂题 AC:AB Rank:96 Rating:2125+66->2191 A.Berzerk 题目大意:有一个东东在长度为n的环上(环上点编号0~ ...

随机推荐

  1. Android后台服务拍照的解决方式

    一.背景介绍 近期在项目中遇到一个需求.实现一个后台拍照的功能. 一開始在网上寻找解决方式.也尝试了非常多种实现方式,都没有惬意的方案.只是确定了难点:即拍照要先预览,然后再调用拍照方法.问题也随之而 ...

  2. windows下mysql5.6.20使用mysqldumpslow.pl分析慢日志

    要想执行mysqldumpslow.pl(这是perl程序),下载perl编译器. 下载地址:http://pan.baidu.com/s/1i3GLKAp 就是ActivePerl_5.16.2.3 ...

  3. Android之——ContentProvider操作XML

    转载请注明出处:http://blog.csdn.net/l1028386804/article/details/47682559 不多说,不废话,直接上代码,大家一看都懂得 /** * Conten ...

  4. Makefileeasy犯错的语法

    1.引言 近期学习android的Build系统,接触最多的自然就是Makefile语法.发现非常多easy出错的地方,不避开这些错误语法没法真正了解Makefile的内涵.以下就介绍遇到的一些让人困 ...

  5. Linux - 进程管理,ps与top

    一个运行的程序,可能有多个进程. PID进程ID. UID启动进程的ID. 进程所属组GID. 进程的状态R运行.S睡眠.Z僵尸. 父进程管理子进程,父进程终止的时候子进程也会终止. 常用的组合为: ...

  6. RBF网络——核心思想:把向量从低维m映射到高维P,低维线性不可分的情况到高维就线性可分了

      RBF网络能够逼近任意的非线性函数,可以处理系统内的难以解析的规律性,具有良好的泛化能力,并有很快的学习收敛速度,已成功应用于非线性函数逼近.时间序列分析.数据分类.模式识别.信息处理.图像处理. ...

  7. POJ3087 Shuffle'm Up

    题目: 现有字符串s1.s2.s12,其中s1.s2的长度为len,s12的长度为2*len. 是否可以通过一些操作使s1和s2转换合并成s12? 变换的操作规则如下: 假设s1=11111,s2=0 ...

  8. MySQL架构与SQL执行流程

    MySQL架构设计 下面是一张MySQL的架构图: 上方各个组件的含义如下: Connectors 指的是不同语言中与SQL的交互 Management Serveices & Utiliti ...

  9. jar运行main函数的方法

    当把java项目打包成jar后,如何运行main函数呢? 第一种:指定运行类: java -cp test.jar com.ming.test.Test 第二种:在MANIFEST.MF里配置了Mai ...

  10. sublime3 install python3

    链接地址:https://blog.csdn.net/Ti__iT/article/details/78830040