/*
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. 项目PMO工作

     算起来.这是第一次以项目PMO人员的身份參与项目,尽管非常可惜没有从头參与,也没有參与到项目结束,仅仅有短短的两个月.但对项目PMO也可略窥一斑.如今就当个流水账写一写吧. 进项目组的时候,是中 ...

  2. 在IIS6,7中部署ASP.NET网站

    查看web.config文件 ASP.NET网站与一般的桌面程序不同,不是拷贝过来就能运行的(数据库连接除外). 要想运行它,通常需要一些配置过程.但是,我们到底需要配置什么呢?答案是:查看web.c ...

  3. 在ubuntu中安装与配置zsh与oh-my-zsh

    先补充点东西 1.ubuntu中默认安装了那些shell jiang@Linux:~$ cat /etc/shells # /etc/shells: valid login shells/bin/sh ...

  4. Linux - 环境变量与位置变量

    环境变量 [root@local ~]# echo $PATH /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin 注:只有自己执行 ...

  5. ASCII和ASCII扩展表

  6. 【media-queries】媒体查询,为了响应式设计而生

    目录 简介 语法 常用尺寸 一 简介 针对现在纷杂的设备,css3中加入,可以查询你的浏览类型(screen彩色屏幕, print, all)和css属性判断. 最常用的就是查询屏幕大小,给予适合的展 ...

  7. Docker 内部之间的网络连接

    一.简介 内部网络连接的2中方式: Docker NetWorking (1.9版本之后推荐使用这个)和 Docker link(1.9 版本之前都使用这个) 推荐使用docker networkin ...

  8. Unity3d 销毁

    using UnityEngine; using System.Collections; public class destroy : MonoBehaviour { void Start () { ...

  9. 原型模式(Prototype)C++实现

    意图:用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象. 实用性:1.当要实例化的类是在运行时刻指定时. 2.为了避免创建一个与产品类层次平行的工厂类层次时. 3.当一个类的实例只能有几 ...

  10. LruCache缓存机制

    LruCache: Android提供的使用了(Least Recently Used)近期最少使用算法的缓存类 内部基于LinkedHashMap实现 实现这个主要需要重写 构造时需要确定Cache ...