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

题意: 一个环形路径编号为1-n,1号点为黑洞,玩家轮流让怪物前进若干步(从自己的操作集合里随便选),若该轮怪物走到黑洞,则该轮的玩家胜利。简单来说,当怪物在x点时,轮到玩家 a 操作,他有个操作为前进 y 步,若前进 y 步之后刚好到达 1 号点,则怪物死亡,玩家 a 胜利。题目要求我们求出所以怪物初始位置和玩家 a, b 各自先手的游戏结果。

思路: 若已知一种状态为 P 状态, 那么与其邻接的状态都为 N 状态, 若一个状态的邻接状态全为 N 状态, 则该状态为 P 状态.

用 (id, x) 记状态 id 从 x 开始, 用 vis[id][x] 记录状态 (id, x) 的结果. -1 表示未处理, 0 表示为 P 状态, 1 表示为 N 状态.

除了死循环的状态外, 终态必定为 (0, 0), (1, 0), 那么用 bfs 从这两个状态逆推前面的状态即可.

代码:

 #include <iostream>
#include <stdio.h>
#include <string.h>
#include <queue>
using namespace std; const int MAXN = 7e3 + ;
int gel[][MAXN], vis[][MAXN], num[][MAXN], k[];
int n; void bfs(void){
queue<pair<int, int> > q;
q.push({, });
q.push({, });
vis[][] = ;
vis[][] = ;
while(!q.empty()){
pair<int, int> cnt = q.front();
int id = cnt.first, x = cnt.second;
q.pop();
if(vis[id][x] == ){
for(int i = ; i < k[!id]; i++){
int tmp = (x - gel[!id][i] + n) % n;
if(vis[!id][tmp] == -){
vis[!id][tmp] = ;
q.push({!id, tmp});
}
}
}else if(vis[id][x] == ){
for(int i = ; i < k[!id]; i++){
int tmp = (x - gel[!id][i] + n) % n;
if(vis[!id][tmp] == -){
if(++num[!id][tmp] == k[!id]){//累计邻接(!id, tmp)状态的必胜态
vis[!id][tmp] = ;
q.push({!id, tmp});
}
}
}
}
}
} int main(void){
scanf("%d", &n);
for(int i = ; i < ; i++){
scanf("%d", &k[i]);
for(int j = ; j < k[i]; j++){
scanf("%d", &gel[i][j]);
}
}
memset(vis, -, sizeof(vis));
bfs();
for(int i = ; i < ; i++){
for(int j = ; j < n; j++){
if(vis[i][j] == -) printf("Loop ");
else if(vis[i][j]) printf("Win ");
else printf("Lose ");
}
puts("");
}
return ;
}

786A(博弈&bfs)的更多相关文章

  1. “盛大游戏杯”第15届上海大学程序设计联赛夏季赛暨上海高校金马五校赛题解&&源码【A,水,B,水,C,水,D,快速幂,E,优先队列,F,暴力,G,贪心+排序,H,STL乱搞,I,尼姆博弈,J,差分dp,K,二分+排序,L,矩阵快速幂,M,线段树区间更新+Lazy思想,N,超级快速幂+扩展欧里几德,O,BFS】

    黑白图像直方图 发布时间: 2017年7月9日 18:30   最后更新: 2017年7月10日 21:08   时间限制: 1000ms   内存限制: 128M 描述 在一个矩形的灰度图像上,每个 ...

  2. Gym - 100548H The Problem to Make You Happy 2014-2015 ACM-ICPC, Asia Xian Regional Contest (BFS+博弈)

    题意:Bob和Alice在一张有向无环图上移动,给定二者的起点,Bob先手.Bob的失败条件是不能移动或者与Alice相遇.两个人都采取最优策略,求Bob是否会赢 分析:银牌题.先确定所有的失败状态, ...

  3. HDU-4678 Mine 博弈SG函数

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4678 题意就不说了,太长了... 这个应该算简单博弈吧.先求联通分量,把空白区域边上的数字个数全部求出 ...

  4. CodeForces 918D MADMAX(博弈+记忆化搜索)

    time limit per test 1 second memory limit per test 256 megabytes input standard input output standar ...

  5. 有向图博弈+出度的结合 Codeforces Round #406 (Div. 2) C

    http://codeforces.com/contest/787/problem/C 题目大意:有一个长度为n的环,第1个位置是黑洞,其他都是星球.已知在星球上(不含第一个黑洞)有一位神.有两个人, ...

  6. HDU 4678 Mine (2013多校8 1003题 博弈)

    Mine Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)Total Submis ...

  7. ACM 博弈(难)题练习 (第一弹)

    第二弹: 套路&&经验总结: 1. N堆***的游戏,一般可以打表找SG函数的规律.比如CodeForces 603C 2.看起来是单轮的游戏,实际上可能拆分成一些独立的子游戏.比如C ...

  8. Gym - 101246D 博弈

    题意:一个无向有环的图,从 1 号结点起火,开始蔓延,两个绝顶聪明的人轮流走,谁不能走谁输,输出输的人: 分析: 当时知道是博弈,但是想当然的以为 1 号结点有一个奇数层,就必胜:其实不是这样的,当一 ...

  9. loj536「LibreOJ Round #6」花札(二分图博弈)

    loj536「LibreOJ Round #6」花札(二分图博弈) loj 题解时间 很明显是二分图博弈. 以某个点为起点,先手必胜的充要条件是起点一定在最大匹配中. 判断方法是看起点到该点的边有流量 ...

随机推荐

  1. BEC listen and translation exercise 39

    What about jigsaw puzzle design for visually handicapped?给视觉障碍人士设计拼图怎么样? Length is 50cm, and then th ...

  2. luogu1801 黑匣子

    惊了呀 Splay Treap 这都什么玩意 两个优先队列搞定 #include <bits/stdc++.h> using namespace std; #define LL long ...

  3. bzoj 3091: 城市旅行 LCT

    题目: http://www.lydsy.com/JudgeOnline/problem.php?id=3091 题解: 首先前三个操作就是裸的LCT模板 只考虑第四个操作. 要求我们计算期望,所以我 ...

  4. Hadoop问题集锦

    1.Permission denied: user=root, access=WRITE, inode="/user":hdfs:supergroup 使用Spark进行处理的时候 ...

  5. Guava手记

    Cache Guava的Cache封装的功能比较全面,但是很多地方和设想的不太一样,最明显的就是RemovalListener,它并不是invalid之后就会被调用,因为在调用Cache的invali ...

  6. AI设计的若干规则阐述

    转自:http://www.gameres.com/491742.html 一般来讲,网络游戏的AI历来就是很简单的AI.相比之下,很多单机游戏的AI就要得复杂一些.而笔者并未从事过大型单机游戏的AI ...

  7. java注解的基本知识

    1: 注解:Annotation是一种应用于类.方法.参数.变量.构造器及包生命中的特殊修饰符,是一种由JSR-175标准选择用来描述代码的元数据. Java中如下的4种注解,专门负责新注解的创建: ...

  8. VisualGDB系列2:VisualGDB对Linux平台的支持特性

    根据VisualGDB官网(https://visualgdb.com)的帮助文档大致翻译而成.主要是作为个人学习记录.有错误的地方,Robin欢迎大家指正. 1 复杂问题的直观解决方案 只需要轻点几 ...

  9. linux日常管理-防火墙netfilter工具-iptables-1

    防火墙的名字叫 netfilter 工具/命令叫iptables 命令:iptables 选项: -t   指定表 -A 在最上面增加一条规则 -I 在最下面增加一条规则 -D 删除一条规则 -A-I ...

  10. 0011_练习题d1

    __author__ = 'qq593' #!/usr/bin/env python #-*- coding:utf-8 -*- #使用while循环输入1 2 3 4 5 6 8 9 10 a=1 ...