LINK

题意:n堆石子,Alice 和 Bob 轮流取石子,谁不能再取或被对方取完为败。但是对于alice拥有限制:b=0此堆正常无限制;b=1此堆Alice只能取奇数个石子;b=2只能取偶数个石子

思路:一看就知道是个NIM的变形题,现在想做这题的思路应当是讨论奇偶个石子且分别在奇数偶数限制下的胜负状况。

很容易能看出当有两堆以上的限制堆时(a=1 b=1不算限制)显然是Alice必败,这是最重要的条件,可以避免大量的推导。

再者讨论b=1的情况:

如果a为偶数,显然该堆可被Bob保证不被Alice一次拿完——直至剩下1颗,此时必定是Bob的回合。

如果a为奇数,如果Alice不取完该堆,Bob可以使该堆变为偶数堆,也可以直接取完,显然对于前者相当于转换到a为偶数的情况,对于后者,相当于不存在该堆,B可控制A的先后手,故A必败。那么如果Alice取完,相当于先后手交换。

最后讨论b=2的情况:

如果a为偶数,如果Alice不取完该堆,Bob可以使该堆变为奇数堆,也可以直接取完,类似于上种情况。先后手互换。

如果a为奇数,那么因为Alice不能取而必败

抱怨一下比赛的时候交了两发WA也没过,也没考虑这么仔细,先后手交换的本应该另加讨论的,我却直接异或了2...

#include <bits/stdc++.h>
#define LL long long
#define PII pair
#define MP(x, y) make_pair((x),(y))
#define fi first
#define se second
#define PB(x) push_back((x))
#define MMG(x) memset((x), -1,sizeof(x))
#define MMF(x) memset((x),0,sizeof(x))
#define MMI(x) memset((x), INF, sizeof(x))
using namespace std;
const int N = 1e5+5;
int a[N], b[N];
int main()
{  int T, n;  scanf("%d", &T);  while(T--){  scanf("%d", &n);  int cnt = 0;int ans = 0;int flag = 0;  for(int i = 1; i <= n; ++i) scanf("%d", &a[i]);for(int i = 1; i <= n; ++i){  scanf("%d", &b[i]);  if(b[i] == 1 && a[i] == 1) ans ^= 1;  else if(b[i] == 1){  cnt++; if(cnt > 1)//有两堆以上限制先手必败continue;flag = 1;//必定先后手互换if(a[i] % 2 == 0) //留1颗 ans ^= 1; //else ans ^= 0;//先手取完 }  if(b[i] == 2){  cnt++;if(cnt > 1)continue;if(a[i] % 2 == 0) //取完,互换先后手flag = 1;  if(a[i] % 2 == 1) //先手必败 必定会留下一颗cnt++;  }  if(b[i] == 0) ans ^= a[i];  }  if(cnt >= 2)printf("Bob\n"); else if(cnt == 1){  if(ans && flag) printf("Bob\n");  else printf("Alice\n");   }  else {if(ans) printf("Alice\n");elseprintf("Bob\n");}   }  return 0;
}

转载于:https://www.cnblogs.com/Yumesenya/p/6832706.html

ZOJ 3964 NIM变形相关推荐

  1. zoj 3964 - Yet Another Game of Stones

    zoj 3964 - Yet Another Game of Stones // 2017zjpc 传送门 题意: 有n堆石子,每堆有一个限制0,1,2,限制只对Alice生效,分别表示没有限制,只能 ...

  2. HDU 3094 树上删边 NIM变形

    基本的树上删边游戏 写过很多遍了 /** @Date : 2017-10-13 18:19:37* @FileName: HDU 3094 树上删边 NIM变形.cpp* @Platform: Win ...

  3. ZOJ - 3591 NIM

    ZOJ - 3591 NIM 题目大意:给你n,s,w和代码,能生成长度为n的序列,问异或和不为0的子序列有多少个? 这是个挂羊头卖狗肉的题,和NIM博弈的关系就是要异或和不为0,一开始以博弈甚至循环 ...

  4. ZOJ 3591 Nim (NIM博弈+统计

    转载请注明出处,谢谢 http://blog.csdn.net/ACM_cxlove?viewmode=contents           by---cxlove 题目:按照某种规律生成一个序列,选 ...

  5. ZOJ 3964 Yet Another Game of Stones (博弈)

    题意:题意跟普通的nim博弈差不多  就是一位选手取的时候 加了一个限制条件 思路: 1.全部b[i]=0 那么 这个就是Al先手的NIM博弈 2.有多个b[i]>=1&&a[i ...

  6. 每日打卡 2017.04.02 博弈论专题

    https://vjudge.net/contest/156519#overview 打表:比如求斐波那契的第k项,k<=1000,很多case,这时可以预处理的时候把1-1000全部求出来并储 ...

  7. 020_boxel_rebound

    title 020<Boxel Rebound>"嗨到中毒"的弹跳小方块(附自制赛道分享方法) Boxel Rebound是一款和Google浏览器断网小恐龙类似的弹跳 ...

  8. POJ 1704 Georgia and Bob (Nim游戏变形)

    题目:http://poj.org/problem?id=1704 思路:Nim游戏策略,做如下转换,如果N是偶数,则两两配对,将两个数之间的格子数(距离)看做成这一堆石头的数量. 如果N是奇数,则将 ...

  9. 【ZOJ - 3591】Nim(博弈问题,思维,STLmap)

    题干: Nim is a mathematical game of strategy in which two players take turns removing objects from dis ...

最新文章

  1. Android Studio配置统一管理依赖版本号引用
  2. 计划策略的配置参数(1)
  3. Tomcat非正常退出导致无法再次启动
  4. 同时买票是怎么实现的_搞笑GIF段子:这位挖掘机司机真的很牛,同时胆子很大...
  5. mysql开发是做什么_数据库开发是做什么东西的
  6. 转载CentOS7 yum 安装与配置MySQL5.7
  7. 第十七届全国机器翻译大会(CCMT 2021) 征文延期通知
  8. 一次完整的react hooks实践
  9. 详解Guitar Pro 7导入吉他谱的步骤
  10. 神经网络中的稀疏编码和自动编码了解一下
  11. php关键词分析工具,搜索引擎关键词查询分析工具
  12. python-鸢尾花分类
  13. CKEditor 修改编辑器 字体大小和行高
  14. tuts4you 注册_设计和开发完整的网站(Tuts + Mini系列,第3页)
  15. 在树莓派上用python实现人脸识别(face_recognition,PIL,opencv)
  16. 微信小程序之子页面动态修改导航栏标题文字内容
  17. 学习【Cesium】第六篇,Cesium地图点云与地形的加载(学不会揍我)
  18. 转自蒋宇(MTK WAP和MMS网络服务配置 )
  19. 家园守卫战新系统冲入海盗营地漏洞,无限赚钱
  20. C语言小游戏-----字母塔

热门文章

  1. 怎样看懂电路板?电路板短路检查方法是什么?
  2. 2022建筑焊工(建筑特殊工种)考试题库及在线模拟考试
  3. allure测试报告怎么清除历史记录的数据,只展示当前运行结果内容
  4. TS 浅拷贝和深拷贝方法
  5. Prometheus 简介
  6. 春运路上的“神笔马良”
  7. 大数据是如何发展起来的?
  8. python导入包时有下划红线
  9. star ccm linux版本安装教程,StarCCM+ V5.02.009安装指南(PC Linux 32).doc
  10. 电路结构原理_零基础学电工之常用电气符号和举例认识电路图