题目链接

很明显的博弈题目,但是昨天打比赛的时候就是一直想不出来,一直在纠结这个loop的情况到底要怎么定义,感觉到深深的挫败感,自己之前专门看了一段时间博弈也没有任何用处= =太菜了

今天看了一下题解,发现思路其实还是很简单的,对于每个点都有两种状态,a推到这里和b推到这里,我们可以知道,对于1这个位置,无论哪个人在面临这样的局面时,都是必败态,我们从这个点出发,如果这个点是必败态(0),那么对于所有能一步走到这个点的位置,都有必胜态;对于每个状态,只有当它的后续状态都为1时,这个点为必败态,所以我们可以从1出发,对于每个能走到这个点的状态本身进行一个数量的统计,如果这个num=它的可操作步数,就说明这个点为必败态。

我们可以通过bfs来解决。

#include <bits/stdc++.h>
using namespace std;
const double eps = 1e-6;
const double pi = acos(-1.0);
const int INF = 0x3f3f3f3f;
const int MOD = 1000000007;
#define ll long long
#define CL(a) memset(a,0,sizeof(a))
#define maxn 7010
#define mod 2520
int dp[2][maxn],num[2][maxn];
int n;
vector<int> v[2];void bfs()
{queue<pair<int,int> > que;que.push(make_pair(0,0));que.push(make_pair(1,0));while(!que.empty()){int p=que.front().first;int pos=que.front().second;int x=dp[p][pos];que.pop();if(x==0){for(int i=0; i<v[!p].size(); i++){int nxt=(pos-v[!p][i]+n)%n;if(dp[!p][nxt]==-1){dp[!p][nxt]=1;que.push(make_pair(!p,nxt));}}}else{for(int i=0; i<v[!p].size(); i++){int nxt=(pos-v[!p][i]+n)%n;if(dp[!p][nxt]!=-1) continue;if(num[!p][nxt]<v[!p].size()) num[!p][nxt]++;if(num[!p][nxt]==v[!p].size()){dp[!p][nxt]=0;que.push(make_pair(!p,nxt));}}}}}int main ()
{memset(dp,-1,sizeof(dp));memset(num,0,sizeof(num));cin>>n;for(int i=0; i<2; i++){int k;cin>>k;for(int j=0; j<k; j++){int m;cin>>m;v[i].push_back(m);}}dp[0][0]=dp[1][0]=0;bfs();for(int i=0; i<2; i++){for(int j=1; j<n; j++){if(dp[i][j]==0) cout<<"Lose"<<' ';else if(dp[i][j]==1) cout<<"Win"<<' ';else cout<<"Loop"<<' ';}cout<<endl;}return 0;
}

Codeforces 786A Berzerk(博弈)相关推荐

  1. CodeForces 786A Berzerk 博弈?BFS瞎搞

    ans[i][j] i号选手在位置j行动的结果. 预处理,将每位选手能够直接到达黑洞的点 ans[1][(n-a[1][i]+n) % n] = -1; 表示必赢的点 把这些点加入到队列,作为BFS的 ...

  2. Codeforces 786A Berzerk(博弈论)

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

  3. Ticket Game CodeForces - 1215D(博弈题,巴什博弈思维)

    题意:两个人玩游戏,通过轮流填数字(0~9),若最终左右两边的和相等,后手赢,否则先手赢.起始有部分数字和空格. 官方题解: 题解翻译: 让我们把余额表示为左半部分数字和右半部分数字和的差.也让我成为 ...

  4. Problem - 1190B - Codeforces(分类讨论博弈)

    Problem - 1190B - Codeforces 题目大意:有nnn堆石子,每堆的数目为aia_iai​,现在Alice和Bob两个人可以移走任意一堆不为空的石子中的一颗石子,如果某人移动完石 ...

  5. CodeForces - 1110G Tree-Tac-Toe(博弈+构造)

    题目链接:点击查看 题目大意:给出一棵树状棋盘,棋盘上初始时可能为空也可能为白色,小黑和小白轮流操作,每次操作小黑可以选择一个空位置染成黑色,小白可以选择一个空位置染成白色,胜利规则和五子棋类似,有三 ...

  6. Codeforces 841B Godsend 博弈

    题意:给一串序列,第一个人可以从中随意取出和为奇数的子串,第二个人可以从中取出和为偶数的子串,第一个人先走,若到某个人时其无法进行操作,则其输.求出赢的那个人是谁 思路:如果在某步中某个人可以取完所有 ...

  7. Codeforces Round #417:E. FountainsSagheer and Apple Tree(树上博弈)

    Codeforces Round #417:E. FountainsSagheer and Apple Tree(树上博弈) 标签: codeforces 2017-06-02 11:41 29人阅读 ...

  8. Codeforces Round #726 (Div. 2) D. Deleting Divisors 博弈

    传送门 文章目录 题意: 思路: 题意: 给你一个数nnn,有两个人博弈,每次可以将nnn减去一个nnn的因子,这个因子不能为111或nnn.当不能操作的人输掉游戏.问你先手赢还是后手赢. 思路: 这 ...

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

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

最新文章

  1. 如何优化cocos2d程序的内存使用和程序大小:第一部分
  2. 贝尔实验室发布6G通信白皮书
  3. matlab 2016b更改工作路径
  4. sqlmap namespace ibatis 没有生效
  5. 『物理社工』五一回家的“小插曲”
  6. java jsp学习指南_JSP教程–最终指南
  7. 深度学习在医学影像中的研究进展及发展趋势
  8. Laravel核心解读--Database(四) 模型关联
  9. 宝塔搭建laravel所需要的lnmp环境linux-nginx-mysql-php-composer-git
  10. 使用RedisTemplate实现Redis分布式锁出现的一些列问题(避坑)
  11. Java 时间处理 Instant
  12. ubuntu 搭建正版彩虹秒赞网
  13. ppt学习02——字体
  14. 读书笔记《Unix编程艺术》一
  15. pcduino_arm_rtl8187L 驱动安装编译过程
  16. 小红帽Linux系统命令重启,Linux系统常用命令之一
  17. LNK2005 已经在*.obj中定义 排雷
  18. 打通法律服务群众“最后一公里”,方正璞华劳动人事法律自助咨询服务平台频获“点赞”
  19. kotlin 实战之核心基础特性总结
  20. 安卓UI图px标注适配攻略:批量转化px为dp

热门文章

  1. Spring Boot2 总结(二) Spring Security的基本配置
  2. 2018 51信用卡春招后端开发实习题解
  3. StoryBoard运用技巧
  4. 中国红客联盟、编程爱好者、中国站长网等追加
  5. 做电商网站的主键策略
  6. 如何免费获取IEEE论文,亲测有效,【分享给有需要的人】
  7. C# 正则表达式指南
  8. 通过jstack分析cpu问题
  9. zabbix邮件报警发送至qq邮箱
  10. Riak 简介,第 1 部分: 与语言无关的 HTTP API