ans[i][j]

i号选手在位置j行动的结果。

预处理,将每位选手能够直接到达黑洞的点

ans[1][(n-a[1][i]+n) % n] = -1; 表示必赢的点
把这些点加入到队列,作为BFS的起点
对于必赢点,敌人能够到达必赢点的点标记ans[敌人][能到该点(必赢)的点]++;
当修改后ans[选手][点]==step_num[本选手] 表示能到的点都是敌人的必赢点,那么本点必输,加入队列。
对于必输点,敌人能够到达必输点的点是必赢点,如果没被加入到队列,那么敌人必赢点加入队列,标记为-1;

结果输出:
==-1必赢
==step_num[本选手] 必输
其余loop

  1 #include <cstdio>
  2 #include <cmath>
  3 #include <iostream>
  4 #include <cstring>
  5 #include <cmath>
  6 #include <queue>
  7 using namespace std;
  8 int a[3][11111];
  9 int ans[3][11111];
 10 struct dd
 11 {
 12     int id;
 13     int b;
 14 };
 15 queue <dd> Q;
 16 int main()
 17 {
 18     int n;
 19     int s[3];
 20     dd D;
 21     cin >> n;
 22     cin >> s[0];
 23
 24     for (int i = 1; i <= s[0]; i++)
 25         scanf("%d", & a[0][i]);
 26     cin >> s[1];
 27     for (int i = 1; i <= s[1]; i++)
 28         scanf("%d", & a[1][i]);
 29
 30     memset(ans, 0, sizeof(ans));
 31     for (int i = 1; i <= s[0]; i++)
 32     {
 33         ans[0][(n - a[0][i] + n) % n] = -1;
 34         D.b = 0;
 35         D.id = (n - a[0][i] + n) % n;
 36         Q.push(D);
 37     }
 38     for (int i = 1; i <= s[1]; i++)
 39     {
 40         ans[1][(n - a[1][i] + n) % n] = -1;
 41         D.b = 1;
 42         D.id = (n - a[1][i] + n) % n;
 43         Q.push(D);
 44     }
 45     while (!Q.empty())
 46     {
 47         D = Q.front();
 48         Q.pop();
 49         int b = D.b;
 50         int id = D.id;
 51         if (ans[b][id] == -1)
 52         {
 53             for (int i = 1; i <= s[!b] ; i++)
 54             {
 55                 int from = (id - a[!b][i] + n) % n;
 56
 57                 if ((ans[!b][from] != -1) && ans[!b][from] != s[!b])
 58                 {
 59                     ans[!b][from]++;
 60                     if (ans[!b][from] == s[!b])
 61                     {
 62                         D.b = !b;
 63                         D.id = from;
 64                         Q.push(D);
 65                     }
 66                 }
 67
 68             }
 69         }
 70         else
 71         {
 72             for (int i = 1; i <= s[!b] ; i++)
 73             {
 74                 int from = (id - a[!b][i] + n) % n;
 75                 if ((ans[!b][from] != -1) && ans[!b][from] != s[!b])
 76                 {
 77                     D.b = !b;
 78                     D.id = from;
 79                     ans[!b][from] = -1;
 80                     Q.push(D);
 81                 }
 82             }
 83         }
 84     }
 85     for (int i = 1; i < n - 1; i++)
 86         if (ans[0][i] == -1) cout << "Win" << " ";
 87         else if (ans[0][i] == s[0]) cout << "Lose" << " ";
 88         else cout << "Loop" << " ";
 89     if (ans[0][n - 1] == -1) cout << "Win" << endl;
 90     else if (ans[0][n - 1] == s[0]) cout << "Lose" << endl;
 91     else cout << "Loop" << endl;
 92     for (int i = 1; i < n - 1; i++)
 93         if (ans[1][i] == -1) cout << "Win" << " ";
 94         else if (ans[1][i] == s[1]) cout << "Lose" << " ";
 95         else cout << "Loop" << " ";
 96     if (ans[1][n - 1] == -1) cout << "Win" << endl;
 97     else if (ans[1][n - 1] == s[1]) cout << "Lose" << endl;
 98     else cout << "Loop" << endl;
 99
100 }

转载于:https://www.cnblogs.com/HITLJR/p/6613061.html

CodeForces 786A Berzerk 博弈?BFS瞎搞相关推荐

  1. Codeforces 786A Berzerk(博弈)

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

  2. Codeforces 786A Berzerk(博弈论)

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

  3. Codeforces 924C Riverside Curio(瞎搞)

    题目链接:Riverside Curio 题意 ArkadyArkadyArkady 打算观察一条河的水位 nnn 天,每天他都在水平面处做一个标记,水的涨落不会将之前的标记冲走,每天他都会记录下严格 ...

  4. [JZOJ5281]钦点题解--瞎搞+链表

    [JZOJ5281]钦点题解--瞎搞+链表 题目链接 于 暴 力 过 分析 第一眼: 模拟美滋滋?! 然后数据范围...不太对 naiive模拟30pts 然后你交换字符串指针60pts 然后发现可以 ...

  5. android重置系统,安卓手机越用越卡,恢复出厂设置真有用?别瞎搞,看完就明白了!...

    安卓手机越用越卡,恢复出厂设置真有用?别瞎搞,看完就明白了! 现在手机的价格逐渐的开始上升,一部好一点的手机价格还是比较贵的,所以很多人想要节省更多的换机支出,都会想要购买到一款可以使用的比较久的手机 ...

  6. HDU5971【瞎搞】

    题意:略(忙着准备文化课...明天期中考啊.... 思路: 正解就是染色,2-sat搞: AC代码(虽然是错误的...数据水(过踏马的也行啊,起码打脸他啊!) 4 3 1 0 1 2 2 3 3 4 ...

  7. HDU 5600(瞎搞)

    第一场Bestcoder居然爆零..果然是too naive..小聪明全部直接输出"YES"过了pretest,结果被叉也是&%$% 找到规律传递下就好.后来看官方题解感觉 ...

  8. HDU 4923 Room and Moor(瞎搞题)

    瞎搞题啊.找出1 1 0 0这样的序列,然后存起来,这样的情况下最好的选择是1的个数除以这段的总和. 然后从前向后扫一遍.变扫边进行合并.每次合并.合并的是他的前驱.这样到最后从t-1找出的那条链就是 ...

  9. 别再瞎搞数仓了!BAT内部大神:数据仓库不是谁都可以建的

    在我没有进互联网之前,我一直以为数据仓库是所有企业进行数据资产管理的必备工作,但直到我去了很多家企业搞数据之后才发现,原来并不是所有的企业都适合做数据仓库,更不要说数据中台了. 很多企业现在做数据仓库 ...

最新文章

  1. C++基础知识(二)
  2. 敲诈勒索比特币不断,企业用户如何防“山寨”钓鱼邮件
  3. RDMA技术详解(三):理解RDMA Scatter Gather List
  4. 使用vscode删除markdown空行
  5. oracle regr,oracle 分析函数
  6. 【新功能】MaxCompoute禁止Full Scan功能开放 1
  7. 用户视图切换为Linux视图,视图_ITPUB博客
  8. SpringApplication#run⽅法第5步,打印banner(四)
  9. Python实现代码雨效果
  10. 人脸数据集——亚洲人脸数据集
  11. td 提示暂无数据图片同上
  12. 操作系统(一)—— 操作系统概论
  13. python除数为0报错_Python3报错-Python入门到精通
  14. gwas snp 和_新的高密度玉米SNP芯片可用于基因组选择、GWAS和群体遗传学
  15. C#笔记5//建造游戏1/网格地图脚本1/自编/仅创建网格/无需插件
  16. 无极性电容和有极性电容的爆炸
  17. Expected required, optional, or repeated.错误解决方法
  18. 打开pdf文件目录的方法
  19. 笛卡儿积与我的小故事
  20. 欢迎光临 https://github.com/zjcxc

热门文章

  1. Google Chrome禁用触摸板滑动前进后退
  2. 个人的敏感信息需要怎么进行安全保护的一些思考记录
  3. 1000道Python编程题
  4. [Android]-SDK QQ微信登入
  5. matlab 符号表达式正负,如何在Matlab上为符号表达式编写`lhs()`或`rhs()`函数
  6. 抓取网页生成 PDF
  7. 【IDM】IDM下载腾讯视频下载广告和分段的问题
  8. linux主机sys使用率忽高忽低,cpu使用率忽高忽低的原因和解决方法
  9. 广西铁路局计算机类待遇怎么样,南宁铁路局月薪待遇 如何进入铁路工作
  10. 疫情下的通信人:你我的岁月静好,是谁在负重前行?