/*
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. Linux USB 驱动开发(一)—— USB设备基础概念【转】

    本文转载自:http://blog.csdn.net/zqixiao_09/article/details/50984074 在终端用户看来,USB设备为主机提供了多种多样的附加功能,如文件传输,声音 ...

  2. sql server drop login failed

    https://stackoverflow.com/questions/37275/sql-query-for-logins https://www.mssqltips.com/sqlserverti ...

  3. Linux - 进程与内存查看

    top NI表示进程的优先级. -20的优先级,非常的高. top -p xxx 可以查看具体的进程情况. renice -n -6 进程ID 可以改变一个正在运行的pid的优先级. [root@lo ...

  4. DDos攻击,使用深度学习中 栈式自编码的算法

    转自:http://www.airghc.top/2016/11/10/Dection-DDos/ 最近研究了一篇论文,关于检测DDos攻击,使用了深度学习中 栈式自编码的算法,现在简要介绍一下内容论 ...

  5. 【POJ 2044】 Weather Forecast

    [题目链接] http://poj.org/problem?id=2044 [算法] 广度优先搜索 [代码] #include <algorithm> #include <bitse ...

  6. 移动测试基础—adb、monkey命令

    最近打算把移动测试相关的知识总结一下,先从基础开始吧,总结一下adb.monkey命令 adb常用命令总结 adb / adb -help 使用帮助 adb devices 查看连接到电脑的设备 ad ...

  7. ThinkPHP搜索框需要注意的事项

    1.当搜索成功后需要用到分页的时候,form表单需要用get传参 2.编码方式 当编码方式不正确的时候,使用分页类改变分页,会使搜索框里面的内容乱码 改变编码方式的方法 第一种:header(&quo ...

  8. ComboxBox控件、checklistbox控件和listbox控件的组合开发

    第一步:先创建一个WinForm窗体应用程序,按照下图所示的进行布局. 第二步:为ComboxBox控件.checklistbox控件和listbox控件和button控件设置属性 第三步:在代码中的 ...

  9. Windows 文件自动同步共享工具

    操作地址: http://blog.sina.com.cn/s/blog_1320088ed0102uxln.html下载地址: http://www.zisync.com/download

  10. webpack打包css自动添加css3前缀

    为了浏览器的兼容性,有时候我们必须加入-webkit,-ms,-o,-moz这些前缀.目的就是让我们写的页面在每个浏览器中都可以顺利运行. 1.安装 cnpm i postcss-loader aut ...