sdut——4541:小志志和小峰峰的日常(取石子博弈模板题 4合1)
小志志和小峰峰的日常
Problem Description
小志志和小峰峰特别喜欢一起讨论一些很好玩的问题。
小志志发现一个有趣的游戏,马上和小峰峰进行了分享。
有 n 堆石子堆,每堆石子个数为 a[i]。
到小志志的回合:小志志可以选取其中的一堆,拿至少 1 个最多 x 个石子。
到小峰峰的回合:小峰峰可以选取其中的一堆,拿至少 1 个最多 y 个石子。
小志志先手,回合交替进行,到该玩家回合如果无法操作,该玩家输。
Input
输入一个 T,总共有 T 组测试数据。
每组测试数据:
第一行输入 n 代表有 n 堆石子堆。
第二行输入 n 堆石子堆分别的数量。
第三行输入两个用空格隔开的 x, y 分别代表小志志和小峰峰对于一堆石子最多能拿的数量。
(1 <= n <= 1e5, 1 <= a[i], x, y <= 1e9)
Output
小志志赢输出 “xzz”,小峰峰赢输出 “xff”,答案不包含 “”。
Sample Input
3
1
3
2 2
2
4 7
4 5
3
3 4 7
8 8
Sample Output
xff
xzz
xff
题解:
我们需要分类讨论:
x == y 的时候:经典的 sg
x != y 的时候:
任意的 a[i] <= min(x, y):Nim 博弈
否则至少存在一堆 a[i] > min(x, y):
如果 x > y:
我们把先手能拿的石子个数看成 y 的话,就是经典的 sg,如果亦或和不是 0 那么先手必
胜。
如果亦或和是 0,那么先手可以选择石子个数大于 y 的堆,拿掉 y+1 的石子个数。这样对
于对方而言亦或和还是 0。所以先手必胜。
所以无论如何:先手必胜
如果 x < y:
如果石子堆个数 > min(x, y) 的堆数大于 2:后手必胜,先手无论如何处理都会变成上述的
情况。
如果石子堆个数 > min(x, y) 的堆数 == 1:
先手肯定会选择 > min(x, y) 的石子堆进行操作,不然先手必败。
设这堆石子个数为 t,除去这堆石子的亦或和为 ans,你只有将这堆石子个数变成 ans &&
ans <= x 才能赢。
所以 t-x <= ans && ans <= x 先手必胜。
否则先手必败。
#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int N = 1e5+5;
string s[2];
ll n, x, y, T;
ll arr[N]; bool f1(ll ans){
for(int i = 1; i <= n; i++)
ans ^= arr[i]%(x+1);
return ans != 0;
} int main()
{
s[1] = "xzz", s[0] = "xff";
cin >> T;
while(T--)
{
cin >> n;
for(int i = 1; i <= n; i++) cin >> arr[i];
cin >> x >> y;
if(x == y) cout << s[f1(0)] << endl; //经典sg
else{
int flag = 0, ans = 0;
for(int i = 1; i <= n; i++){
ans ^= arr[i];
if(arr[i] > min(x, y))
flag++;
}
if(!flag){ // Nim博弈
if(ans) cout << s[1] << endl;
else cout << s[0] << endl;
}
else{
if(x > y) cout << s[1] << endl;
else{
if(flag > 1) cout << s[0] << endl;
else{
int t;
for(int i = 1; i <= n; i++){
if(arr[i] > min(x, y)){
t = arr[i];
ans ^= arr[i];
break;
}
}
if(t - ans <= x && ans <= x)
cout << s[1] << endl;
else cout << s[0] << endl;
}
}
}
}
}
return 0;
}
sdut——4541:小志志和小峰峰的日常(取石子博弈模板题 4合1)的更多相关文章
- BZOJ1022[SHOI2008]小约翰的游戏——anti-SG(反尼姆博弈)
题目描述 小约翰经常和他的哥哥玩一个非常有趣的游戏:桌子上有n堆石子,小约翰和他的哥哥轮流取石子,每个人取的时候,可以随意选择一堆石子,在这堆石子中取走任意多的石子,但不能一粒石子也不取,我们规定取到 ...
- 清橙A1206.小Z的袜子 && CF 86D(莫队两题)
清橙A1206.小Z的袜子 && CF 86D(莫队两题) 在网上看了一些别人写的关于莫队算法的介绍,我认为,莫队与其说是一种算法,不如说是一种思想,他通过先分块再排序来优化离线查询问 ...
- SDUT 2766 小明传奇2
小明传奇2 Time Limit: 1000ms Memory limit: 65536K 有疑问?点这里^_^ 题目描述 小明不但创建了自己的商店而且选择了建立了自己的货币系统. 传统地,一个 ...
- 「拉勾网」薪资调查的小爬虫,并将抓取结果保存到excel中
学习Python也有一段时间了,各种理论知识大体上也算略知一二了,今天就进入实战演练:通过Python来编写一个拉勾网薪资调查的小爬虫. 第一步:分析网站的请求过程 我们在查看拉勾网上的招聘信息的时候 ...
- hdu---(4515)小Q系列故事——世界上最遥远的距离(模拟题)
小Q系列故事——世界上最遥远的距离 Time Limit: 500/200 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others)T ...
- BZOJ 2038: [2009国家集训队]小Z的袜子(hose)【莫队算法裸题&&学习笔记】
2038: [2009国家集训队]小Z的袜子(hose) Time Limit: 20 Sec Memory Limit: 259 MBSubmit: 9894 Solved: 4561[Subm ...
- 一套代码小程序&Web&Native运行的探索03——处理模板及属性
接上文:一套代码小程序&Web&Native运行的探索02 对应Git代码地址请见:https://github.com/yexiaochai/wxdemo/tree/master/m ...
- 微信小程序--data的赋值与取值
通过小程序官方文档可知:Page() 函数用来注册一个页面.接受一个 object 参数,其指定页面的初始数据.生命周期函数.事件处理函数等.其中的参数data用来设置初始数据,WXML 中的动态数据 ...
- HDU 2072 - 单词数 - [(有点小坑的)字典树模板题]
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2072 Problem Descriptionlily的好朋友xiaoou333最近很空,他想了一件没有 ...
- Luogu 1494 - 小Z的袜子 - [莫队算法模板题][分块]
题目链接:https://www.luogu.org/problemnew/show/P1494 题目描述 作为一个生活散漫的人,小Z每天早上都要耗费很久从一堆五颜六色的袜子中找出一双来穿.终于有一天 ...
随机推荐
- 基于Linux的ssh协议配置sftp
sftp采用的是ssh加密隧道,安装性方面较ftp强,而且依赖的是系统自带的ssh服务,不像ftp还需要额外的进行安装 1. 创建sftp组 创建完成之后使用cat /etc/group命令组的信息 ...
- Keil 2032 license 解决方法(keygen)
https://pan.baidu.com/s/1nH_KrsHoLEJlJQKhfIoXHA
- Git,GitHub与GitLab的区别
Git是一种版本控制系统,是一种工具,用于代码的存储和版本控制. GitHub是一个基于Git实现的在线代码仓库,是目前全球最大的代码托管平台,可以帮助程序员之间互相交流和学习. GitLab是一个基 ...
- 【python】绘图坐标轴标题中包含上标或下标
plt.ylabel("流量($\mathregular{m^3}$/s)") #绘图坐标轴添加上标$\mathregular{m^3}$,若是下标m_3 不加m ...
- b站——沐神——深度学习
预备知识 数据操作 MXNet nd:(array函数:得到NDArray) [[1. 1. 1.] [1. 1. 1.]] <NDArray 2x3 @cpu(0)> np:(asnum ...
- 第一讲:selenium快速入门
一.selenium目前住主流的web自动化测试框架: 1.资料丰富 资料丰富 2.测试岗位招聘要求,上板率非常之高 3.支持多语言(iava/ pythan/ go /js) ...
- 关于ERROR 1366 (HY000): Incorrect string value: '\xF0\x9F\x87\xA8\xF0\x9F...'报错的解决心得
昨天发现MySQL数据库执行发生了报错 ERROR 1366 (HY000): Incorrect string value: '\xF0\x9F\x87\xA8\xF0\x9F...' 马上意识到应 ...
- QT实现简单曲线图
首先用到的控件为QGraphicsView 使用到的头文件 #include <QChart> #include <QChartView> #include <QtWid ...
- Selenium 自动化中实现双击操作
在selenium中,以name定位为例,单击元素的代码为:driver.find_element_by_name("name").click(),那么,实现双击操作的代码能不能写 ...
- Restful Fast Request 添加前置脚本,实现不同环境免设置token 直接请求
idea安装Restful Fast Request插件后,进行如下设置,并打开 项目全局参数 对话框 进入前置脚本 tab 编写如下groovy脚本代码(插件脚本语言默认支持groovy,该语言被称 ...