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


这个题出做$DIV2$的$C$以及$DIV1$的A会不会难了一点啊...

做法和题解并不一样,只是很懂题解中记忆化搜索的时候怎么判断的$LOOP$

我们都知道组合游戏中一个状态所有的后继如果都是赢的那么这个状态是输的,一个状态只要有一个后继是输的那么这个状态就是赢的。

但是这个题目中有$LOOP$的情况,考虑将一个点拆为两个,分别表示第一个人和第二个人在这个点是必胜还是必败(也就是答案),如果判断不出来就是$LOOP$

因为$LOOP$不好处理,所以考虑不是记忆化$DFS$,而是按照反向边逆向递推,这个递推过程满足拓扑序就可以了。


 #include<iostream>
#include<cstdio>
#include<algorithm>
#include<vector>
#include<cstdlib>
#include<cmath>
#include<cstring>
#include<queue>
using namespace std;
#define maxn 7010
#define llg long long
#define yyj(a) freopen(a".in","r",stdin),freopen(a".out","w",stdout);
llg n,m,ans[][maxn],N1,N2,a[maxn],b[maxn],se[][maxn],du[][maxn]; struct node
{
llg v1,v2;
}f[][maxn]; struct data
{
llg x,y;
}; queue<data>dl; inline int getint()
{
int w=,q=; char c=getchar();
while((c<'' || c>'') && c!='-') c=getchar(); if(c=='-') q=,c=getchar();
while (c>='' && c<='') w=w*+c-'', c=getchar(); return q ? -w : w;
}
void work()
{
ans[][]=ans[][]=;
data w;
w.x=,w.y=;
dl.push(w); w.x=;
dl.push(w);
while (!dl.empty())
{
w=dl.front(); dl.pop();
llg x=w.x,y=w.y;
if (!x)
{
for (llg i=;i<=N2;i++)
{
llg wz=(y-b[i]+n-)%n+;
du[][wz]--;
if (ans[][wz]) continue;
if (ans[x][y]==)
{
ans[][wz]=;
data nw; nw.x=,nw.y=wz;
dl.push(nw);
du[][wz]=-;
}
if (du[][wz]==)
{
ans[][wz]=;
data nw; nw.x=,nw.y=wz;
dl.push(nw);
du[][wz]=-;
}
}
}
else
{
for (llg i=;i<=N1;i++)
{
llg wz=(y-a[i]+n-)%n+;
du[][wz]--;
if (ans[][wz]) continue;
if (ans[x][y]==)
{
ans[][wz]=;
data nw; nw.x=,nw.y=wz;
dl.push(nw);
du[][wz]=-;
}
if (du[][wz]==)
{
ans[][wz]=;
data nw; nw.x=,nw.y=wz;
dl.push(nw);
du[][wz]=-;
}
}
}
}
} int main()
{
yyj("C");
cin>>n;
cin>>N1;
for (llg i=;i<=N1;i++) a[i]=getint();
cin>>N2;
for (llg i=;i<=N2;i++) b[i]=getint(); for (llg i=;i<=n;i++)
{
du[][i]=N1,du[][i]=N2;
} work();
for (llg i=;i<=n;i++)
{
if (ans[][i]==) printf("Win ");
if (ans[][i]==) printf("Lose ");
if (ans[][i]==) printf("Loop ");
}
printf("\n");
for (llg i=;i<=n;i++)
{
if (ans[][i]==) printf("Win ");
if (ans[][i]==) printf("Lose ");
if (ans[][i]==) printf("Loop ");
}
return ;
}

Codeforces 786 A. Berzerk的更多相关文章

  1. Codeforces 786 B. Legacy

    题目链接:http://codeforces.com/contest/786/problem/B 典型线段树优化连边,线段树上的每一个点表示这个区间的所有点,然后边数就被优化为了至多${nlogn}$ ...

  2. Codeforces 786 C. Till I Collapse

    题目链接:http://codeforces.com/contest/786/problem/C 大力膜了一发杜教的代码感觉十分的兹瓷啊! 我们知道如果$k$是给定的我们显然是可以直接一遍$O(n)$ ...

  3. 【codeforces 787C】Berzerk

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

  4. [刷题]Codeforces 786A - Berzerk

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

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

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

  6. Codeforces 786A Berzerk(博弈论)

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

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

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

  8. Codeforces Round #786 (Div. 3) 补题记录

    小结: A,B,F 切,C 没写 1ll 对照样例才发现,E,G 对照样例过,D 对照样例+看了其他人代码(主要急于看后面的题,能调出来的但偷懒了. CF1674A Number Transforma ...

  9. CF786A - Berzerk

    /* CF786A - Berzerk http://codeforces.com/contest/786/problem/A 博弈论 直接搜出NP状态图.记得要记忆化剪枝. * */ #includ ...

随机推荐

  1. UVA 11488 Hyper Prefix Sets (字典树)

    题目链接:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem ...

  2. Hybrid App中原生页面 VS H5页面(分享)

    本文部分转自  http://www.jianshu.com/p/00ff5664e000 现有3类主流APP,分别为:Web App.Hybrid App(混合模式移动应用,Hybrid有“混合的” ...

  3. JVM 一套卷,助你快速掌握优化法则

    一:虚拟机内存图解 JAVA 程序运行与虚拟机之上,运行时需要内存空间.虚拟机执行 JAVA 程序的过程中会把它管理的内存划分为不同的数据区域方便管理. 虚拟机管理内存数据区域划分如下图: 数据区域分 ...

  4. 计算概论(A)/基础编程练习2(8题)/8:1的个数

    #include<stdio.h> int main() { ; // 存储测试数据的二进制形式中1的个数 int bian[N]; // 输入十进制整数N 表示N行测试数据 scanf( ...

  5. truncate table很慢之enq: RO - fast object reuse和local write wait等待分析

    使用ASSM表空间(默认模式)的时候,在dss系统中确实会出现truncate很慢的现象,但是他不会100%重现,得看概率.通过sql trace(对任何v$sysstat看起来资源消耗很低的情况,都 ...

  6. Summarization of Tech Interviews

    Summarization of Tech Interviews(技术面试总结) 手心网(2015) Q1. 解释一下 TCP/IP 协议之滑动窗口? 滑动窗口协议的维基:https://en.wik ...

  7. 20145308 《网络对抗》 Web应用 学习总结

    20145308 <网络对抗> Web应用 学习总结 实验内容 (1)Web前端HTML (2)Web前端javascipt (3)Web后端:MySQL基础:正常安装.启动MySQL,建 ...

  8. 【python38--面向对象继承】

    一.继承 1.语法:class DerivedClassName(BaseClassName):子类继承父类 >>> class Parent: def hello(self): p ...

  9. Linux 系统/etc/profile 内配置 系统脚本命令

    背景 在Linux系统下,我们需要利用脚本命令启动一个进程的时候,需要先找到找到启动文件,然后再启动.比如服务器上安装了一个was应用服务器,我们需要每次启动服务器都需要使用如下命令: sh  was ...

  10. Bootstrap3基础 form-horizontal 表单元素横向布局 简单示例

      内容 参数   OS   Windows 10 x64   browser   Firefox 65.0.2   framework     Bootstrap 3.3.7   editor    ...