Codeforces 786 A. Berzerk
题目链接: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的更多相关文章
- Codeforces 786 B. Legacy
题目链接:http://codeforces.com/contest/786/problem/B 典型线段树优化连边,线段树上的每一个点表示这个区间的所有点,然后边数就被优化为了至多${nlogn}$ ...
- Codeforces 786 C. Till I Collapse
题目链接:http://codeforces.com/contest/786/problem/C 大力膜了一发杜教的代码感觉十分的兹瓷啊! 我们知道如果$k$是给定的我们显然是可以直接一遍$O(n)$ ...
- 【codeforces 787C】Berzerk
[题目链接]:http://codeforces.com/contest/787/problem/C [题意] 给你怪物一开始所在的位置; 然后两人轮流操作; 可以选择让这个怪物前进自己的集合里面所拥 ...
- [刷题]Codeforces 786A - Berzerk
http://codeforces.com/problemset/problem/786/A Description Rick and Morty are playing their own vers ...
- Codeforces Round #406 (Div. 1) A. Berzerk 记忆化搜索
A. Berzerk 题目连接: http://codeforces.com/contest/786/problem/A Description Rick and Morty are playing ...
- Codeforces 786A Berzerk(博弈论)
[题目链接] http://codeforces.com/problemset/problem/786/A [题目大意] 有两个人,每个人有一个数集,里面有一些数,现在有一个环,有个棋子放在1, 有个 ...
- 【动态规划】Codeforces Round #406 (Div. 2) C.Berzerk
有向图博弈问题. 能转移到一个必败态的就是必胜态. 能转移到的全是必胜态的就是必败态. 转移的时候可以用队列维护. 可以看这个 http://www.cnblogs.com/quintessence/ ...
- Codeforces Round #786 (Div. 3) 补题记录
小结: A,B,F 切,C 没写 1ll 对照样例才发现,E,G 对照样例过,D 对照样例+看了其他人代码(主要急于看后面的题,能调出来的但偷懒了. CF1674A Number Transforma ...
- CF786A - Berzerk
/* CF786A - Berzerk http://codeforces.com/contest/786/problem/A 博弈论 直接搜出NP状态图.记得要记忆化剪枝. * */ #includ ...
随机推荐
- Python+OpenCV图像处理(八)—— 图像直方图
直方图简介:图像的直方图是用来表现图像中亮度分布的直方图,给出的是图像中某个亮度或者某个范围亮度下共有几个像素.还不明白?就是统计一幅图某个亮度像素数量.比如对于灰度值12,一幅图里面有2000 个像 ...
- Django项目----快速实现增删改查组件(起步阶段!!!)
一.相关知识点回顾 1.什么是反射? 可以用字符串的方式去访问对象的属性 2.反射有四种方法? hasattr(object,name):判断一个对象是不是有name属性或者方法 getattr: ...
- logstash 5.1.1 学习
Logstash 5.1.1 安装配置 安装和配置 java 环境: [root@ ~]# tar xf jdk-8u71-linux-x64.tar.gz [root@ ~]# mv jdk1.8. ...
- Docker学习笔记之Docker 的简历
0x00 概述 在了解虚拟化和容器技术后,我们就更容易理解 Docker 的相关知识了.在这一小节中,我将介绍关于 Docker 的出现和发展,Docker 背后的技术.同时,我们将阐述 Docker ...
- oracle 11g AUTO_SAMPLE_SIZE动态采用工作机制
Note that if you're interested in learning about Oracle Database 12c, there's an updated version of ...
- 【题解】Luogu P2257 YY的GCD
原题传送门 这题需要运用莫比乌斯反演(懵逼钨丝繁衍) 显然题目的答案就是\[ Ans=\sum_{i=1}^N\sum_{j=1}^M[gcd(i,j)=prime]\] 我们先设设F(n)表示满足\ ...
- Python爬虫(一)——豆瓣下图书信息
爬虫目的: 随着近年互联网的发展,网络上的信息飞速数量增长.在庞大的数据面前想要获得期望的信息往往如同大海捞针.通过合理的筛选,在百万甚至数亿计的数据中找到所需信息,无疑有着非常大的意义. 在豆瓣网下 ...
- ACM札记
1. 逗号表达式 在“计蒜客“的ACM教程中,看到这样一段很好的代码: int n; while (scanf("%d", &n), n) { //do something ...
- mysql读写分离[高可用]
顾名思义, 在mysql负载均衡中有多种方式, 本人愚钝,只了解驱动中间件和mysql_proxy两种方式, 对于驱动,利用的是ReplicationDriver,具体请看远哥的这篇文章: MySQL ...
- 回归Android之Android基础和小常识
Activity ,Service,Content Provider,BroadcastReceiver, Intent SQLite,Http,Fragement,Handle 1,Activity ...