题面

Zhangzj和Owaski在玩一个游戏。最开始有一个空的01串,Zhangzj和Owaski轮流进行操作,Zhangzj先走。每次进行操作的人可以在串上任意位置加一个新的字符,由于串是01串,新加的字符也只能是“0”或者“1”。

他们事先约定好一个字符串\(s\),如果在任意时刻,这个字符串包含\(s\)作为它的一个子串,那么Zhangzj获胜。现在给定\(s\),假设Zhangzj和Owaski均按照最优策略进行操作,你的任务是判断Zhangzj能不能在有限时间内获胜。

题意

A,B轮流往一个初始为空的 \(01\) 串中插入 \(0\)/\(1\), A先手,每次可以插在任意位置。给定一个 \(01\)串\(s\), 若某一时刻字符串包含 \(s\) 作为它的一个子串, A赢得游戏。问A是否能在有限时间赢得游戏。

题解

这种题首先要手玩样例, 你大概能发现以下结论:

首先,如果B想, 无论A如何操作, B总能在他操作后让字符串变成一个\(01\)间隔的串,

同理,在A操作一次后, 无论B如何操作, A都能让其变成 \(01\) 间隔串

也就是说, 假如其中一方想, 就可让这个串始终是 \(01\)间隔串,无论对方怎么操作

继续考虑, A如何获胜? 例如 \(0110\) , A可以通过往 \(010\) 中插入一个 \(1\) 来得到

也就是说, 如果 \(s\) 能通过 \(01\)间隔串加入一个字符得到, 那么A可以先让原串先保持 \(01\) 间隔, 等长度足够时再插入一个字符, A必胜

否则的话, \(s\)不能通过 \(01\)间隔串加 \(1\) 一个字符得到, 那么B可以让串始终 \(01\) 间隔, 无法赢

然后就没有然后了, 考虑如果如果一个串中有超过一个相邻相同的位置, 那么就无法得到, 否则一定能

实现

#include <iostream>
#include <cstdio>
using namespace std; int read(){
int num=0, flag=1; char c=getchar();
while(!isdigit(c)) c=getchar();
while(isdigit(c)) num=num*10+c-'0', c=getchar();
return num;
} int n, T; void reads(){
int las, cnt=0; char c = getchar();
while(c!='1' && c!='0') c=getchar();
las = c, c=getchar();
while(c=='0' || c=='1') {
if(c == las) cnt++;
las = c;
c=getchar();
}
printf(cnt>=2?"Owaski\n":"Zhangzj\n");
} int main(){
T = read();
while(T--) reads();
return 0;
}

noi.ac 字符串游戏的更多相关文章

  1. SDOI2015 寻宝游戏 | noi.ac#460 tree

    题目链接:戳我 可以知道,我们相当于是把有宝藏在的地方围了一个圈,求这个圈最小是多大. 显然按照dfs序来遍历是最小的. 那么我们就先来一遍dfs序列,并且预处理出来每个点到根的距离(这样我们就可用\ ...

  2. BZOJ2121 字符串游戏

    Description BX正在进行一个字符串游戏,他手上有一个字符串L,以及其 他一些字符串的集合S,然后他可以进行以下操作:对于一个在集合S中的字符串p,如果p在L中出现,BX就可以选择是否将其删 ...

  3. NOI.ac #31 MST DP、哈希

    题目传送门:http://noi.ac/problem/31 一道思路好题考虑模拟$Kruskal$的加边方式,然后能够发现非最小生成树边只能在一个已经由边权更小的边连成的连通块中,而树边一定会让两个 ...

  4. NOI.AC NOIP模拟赛 第三场 补记

    NOI.AC NOIP模拟赛 第三场 补记 列队 题目大意: 给定一个\(n\times m(n,m\le1000)\)的矩阵,每个格子上有一个数\(w_{i,j}\).保证\(w_{i,j}\)互不 ...

  5. BZOJ2121: 字符串游戏(DP)(字符串删单词,求最多可以删去多少)

    2121: 字符串游戏 Time Limit: 10 Sec  Memory Limit: 259 MBSubmit: 672  Solved: 376[Submit][Status][Discuss ...

  6. noi.ac上的一套(假)NOI题

    noi.ac上的一套(假)NOI题 本来想着可以刷点通过量的,结果发现好像并不是这样的. 整数 description 给你\(n,p\),要你求\(\sum_{k=1}^n\sum_{i=1}^k\ ...

  7. NOI.AC#2144-子串【SAM,倍增】

    正题 题目链接:http://noi.ac/problem/2144 题目大意 给出一个字符串\(s\)和一个序列\(a\).将字符串\(s\)的所有本质不同子串降序排序后,求有多少个区间\([l,r ...

  8. # NOI.AC省选赛 第五场T1 子集,与&最大值

    NOI.AC省选赛 第五场T1 A. Mas的童年 题目链接 http://noi.ac/problem/309 思路 0x00 \(n^2\)的暴力挺简单的. ans=max(ans,xor[j-1 ...

  9. NOI.AC NOIP模拟赛 第五场 游记

    NOI.AC NOIP模拟赛 第五场 游记 count 题目大意: 长度为\(n+1(n\le10^5)\)的序列\(A\),其中的每个数都是不大于\(n\)的正整数,且\(n\)以内每个正整数至少出 ...

随机推荐

  1. ☆☆如何学习MATLAB☆☆

    大多数朋友第一次接触MATLAB一般都是在大学里面开设的MATLAB课程,第一次真正使用MATLAB是在自己的毕业论文中用到.所以对于MATLAB可以说是既爱又恨.爱,是因为使用MATLAB几乎可以实 ...

  2. etcd受损节点重新加入集群

    文章目录 查看当前集群状态 删除受损etcd节点的数据 数据受损节点重新加入集群 修改etcd启动参数,重启etcd 由于自己的误操作,将A节点的etcd备份数据复制到B节点的etcd备份节点目录下, ...

  3. Vue 源码解读(1)—— 前言

    当学习成为了习惯,知识也就变成了常识. 感谢各位的 点赞.收藏和评论. 新视频和文章会第一时间在微信公众号发送,欢迎关注:李永宁lyn 文章已收录到 github 仓库 liyongning/blog ...

  4. web开发 小方法3-position

    值 描述 absolute 生成绝对定位的元素,相对于 static 定位以外的第一个父元素进行定位. 元素的位置通过 "left", "top", " ...

  5. Springboot整合kaptcha验证码

    01.通过配置类来配置kaptcha 01-01.添加kaptcha的依赖: <!-- kaptcha验证码 --> <dependency> <groupId>c ...

  6. python中函数isinstance()用来判断某个实例是否属于某个类

    1 print(isinstance(1,int)) # 运行结果 True 2 # 判断1是否为整数类的实例 3 print(isinstance(1,str)) # 运行结果 False4 # 判 ...

  7. CobaltStrike逆向学习系列(5):Bypass BeaconEye

    这是[信安成长计划]的第 5 篇文章 关注微信公众号[信安成长计划] 0x00 目录 0x01 BeaconEye 检测原理 0x02 Bypass 1 0x03 Bypass 2 0x04 效果图 ...

  8. csaw密码

    题目:AAoHAR1TIiIkUFUjUFQgVyInVSVQJVFRUSNRX1YgXiJSVyJQVRs=写python脚本: import base64 ciphertext="AAo ...

  9. 【C# 线程】C++与C#数据类型对照表

    详细:http://lzltool.com/doc/csharptocaddadd

  10. AndroidMainifest.xml文件属性

    1 <manifest xmlns:android="http://schemas.android.com/apk/res/android" 2 package=" ...