ZOJ 3964 NIM变形
题意: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");
else
printf("Bob\n");
}
}
return 0;
}
ZOJ 3964 NIM变形的更多相关文章
- HDU 3094 树上删边 NIM变形
基本的树上删边游戏 写过很多遍了 /** @Date : 2017-10-13 18:19:37 * @FileName: HDU 3094 树上删边 NIM变形.cpp * @Platform: W ...
- ZOJ 3964 Yet Another Game of Stones Nim游戏变种
ZOJ3964 解题思路 此题的题意比较容易理解,可以简单的看着 Nim 博弈的变种.但问题在于 Alice 对第 i 堆石子的取法必须根据 bi 确定.所以如果这个问题能够归结到正常的 Nim 博弈 ...
- ZOJ - 3591 NIM
ZOJ - 3591NIM 题目大意:给你n,s,w和代码,能生成长度为n的序列,问异或和不为0的子序列有多少个? 这是个挂羊头卖狗肉的题,和NIM博弈的关系就是要异或和不为0,一开始以博弈甚至循环节 ...
- zoj 3591 Nim 博弈论
思路:先生成序列再求异或,最多的可能为n*(n+1)/2: 在去掉其中必败的序列,也就是a[i]=a[j]之间的序列. 代码如下: #include<iostream> #include& ...
- hdu_1907:John(Nim变形)
题目链接 仍是取石子,不过取到最后一个的败 参考链接:http://www.voidcn.com/blog/liwen_7/article/p-3341825.html 简单一句话就是T2 S0必败 ...
- Paint the Grid Reloaded ZOJ - 3781 图论变形
Paint the Grid Reloaded Time Limit: 2000MS Memory Limit: 65536KB 64bit IO Format: %lld & %ll ...
- Atcoder #014 agc014_D 树形DP+nim变形
LINK 题意:两人在一颗树上做游戏,先手可以将树上一个节点染白,后手染黑,到最后时,所有与黑色相邻的白色同时变黑.如果还存在白色,先手胜,否则后手胜. 思路:首先不考虑树上,单独为链时,不管找规律也 ...
- hdu4318阶梯博弈nim变形
阶梯博弈原理参考:http://www.cnblogs.com/jiangjing/p/3849284.html 这题计算每两个之间的间隔就行了,如果是奇数个就把第一个前面的看作一个,偶数个就是两个点 ...
- zoj3591 Nim(Nim博弈)
ZOJ 3591 Nim(Nim博弈) 题目意思是说有n堆石子,Alice只能从中选出连续的几堆来玩Nim博弈,现在问Alice想要获胜有多少种方法(即有多少种选择方式). 方法是这样的,由于Nim博 ...
随机推荐
- flask验证登录学习过程(1)---实践flask_jwt
flask_jwt应用代码: from flask import Flask from flask_jwt import JWT,jwt_required,current_identity from ...
- Opendarlight Carbon 安装
写在前面 目前最轻松的一次安装过程,感谢大翔哥的帮助. 安装过程 1.Zip包下载 找到Opendaylight官网,进入下载界面找到Carbon版本并下载. 2.Zip包解压 把这个zip压缩包解压 ...
- inotify 工具 是一种强大的、细粒度的、异步文件系统监控机制
前言:Inotify是一种强大的.细粒度的.异步文件系统监控机制,它满足各种各样的文件监控需要,可以监控文件系统的访问属性.读写属性.权限属性.删除创建.移动等操作,也就是可以监控文件发生的一切变化. ...
- 复利计算1.0,2.0,3.0(java)
程序源代码: import java.util.Scanner; public class ch { public static void main(String[] args) { Scanner ...
- 各种GIT代码托管工具比较
bitbucket免费支持5个开发成员的团队创建无限私有代码托管库. GOES是一个由GO语音编写的自组GIT托管服务. gitorious 是一个基于GIT版本控制系统的WEB项目托管平台,基于RU ...
- 规则引擎之easyRules
规则引擎听起来是蛮高深的一个词语,但透过现象看本质,Martin Fowler 有如下言: You can build a simple rules engine yourself. All you ...
- mysql(六)索引的数据结构
先做抽象定义如下: 定义一条数据记录为一个二元组[key, data],key为记录的键值,对于不同的数据记录,key是互不相同的:data为数据记录除key外的数据. B-tree的特点: d为大于 ...
- Day 2 while循环 编码 and or not
1.判断下列逻辑语句的True,False. 1)1 > 1 or 3 < 4 or 4 > 5 and 2 > 1 and 9 > 8 or 7 < 6 Flas ...
- 关于在springmvc下使用@RequestBody报http status 415的错误解决办法
网上有很多原因,进行整理后主要有以下几类 springmvc添加配置.注解: pom.xml添加jackson包引用: Ajax请求时没有设置Content-Type为application/json ...
- 题解 P2955 【[USACO09OCT]奇数偶数Even? Odd? 】
很明显这题是个假入门! 小金羊一不小心点进题解发现了内幕 能看的出来都WA过Unsigned long long int 做题可以用Python,Python的变量虽然 强悍的不行! 但是我们可以用字 ...