noi.ac 字符串游戏
题面
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 字符串游戏的更多相关文章
- SDOI2015 寻宝游戏 | noi.ac#460 tree
题目链接:戳我 可以知道,我们相当于是把有宝藏在的地方围了一个圈,求这个圈最小是多大. 显然按照dfs序来遍历是最小的. 那么我们就先来一遍dfs序列,并且预处理出来每个点到根的距离(这样我们就可用\ ...
- BZOJ2121 字符串游戏
Description BX正在进行一个字符串游戏,他手上有一个字符串L,以及其 他一些字符串的集合S,然后他可以进行以下操作:对于一个在集合S中的字符串p,如果p在L中出现,BX就可以选择是否将其删 ...
- NOI.ac #31 MST DP、哈希
题目传送门:http://noi.ac/problem/31 一道思路好题考虑模拟$Kruskal$的加边方式,然后能够发现非最小生成树边只能在一个已经由边权更小的边连成的连通块中,而树边一定会让两个 ...
- NOI.AC NOIP模拟赛 第三场 补记
NOI.AC NOIP模拟赛 第三场 补记 列队 题目大意: 给定一个\(n\times m(n,m\le1000)\)的矩阵,每个格子上有一个数\(w_{i,j}\).保证\(w_{i,j}\)互不 ...
- BZOJ2121: 字符串游戏(DP)(字符串删单词,求最多可以删去多少)
2121: 字符串游戏 Time Limit: 10 Sec Memory Limit: 259 MBSubmit: 672 Solved: 376[Submit][Status][Discuss ...
- noi.ac上的一套(假)NOI题
noi.ac上的一套(假)NOI题 本来想着可以刷点通过量的,结果发现好像并不是这样的. 整数 description 给你\(n,p\),要你求\(\sum_{k=1}^n\sum_{i=1}^k\ ...
- NOI.AC#2144-子串【SAM,倍增】
正题 题目链接:http://noi.ac/problem/2144 题目大意 给出一个字符串\(s\)和一个序列\(a\).将字符串\(s\)的所有本质不同子串降序排序后,求有多少个区间\([l,r ...
- # NOI.AC省选赛 第五场T1 子集,与&最大值
NOI.AC省选赛 第五场T1 A. Mas的童年 题目链接 http://noi.ac/problem/309 思路 0x00 \(n^2\)的暴力挺简单的. ans=max(ans,xor[j-1 ...
- NOI.AC NOIP模拟赛 第五场 游记
NOI.AC NOIP模拟赛 第五场 游记 count 题目大意: 长度为\(n+1(n\le10^5)\)的序列\(A\),其中的每个数都是不大于\(n\)的正整数,且\(n\)以内每个正整数至少出 ...
随机推荐
- 如何从0到1设计一个类Dubbo的RPC框架
之前分享了如何从0到1设计一个MQ消息队列,今天谈谈"如何从0到1设计一个Dubbo的RPC框架",重点考验: 你对RPC框架的底层原理掌握程度. 以及考验你的整体RPC框架系统设 ...
- Solution -「CF 840C」On the Bench
\(\mathcal{Description}\) Link. 给定数列 \(\{a_n\}\),求排列 \(\{p_n\}\) 的个数,使得 \((\forall i\in[1,n))(a_ ...
- JavaScript函数式编程(纯函数、柯里化以及组合函数)
JavaScript函数式编程(纯函数.柯里化以及组合函数) 前言 函数式编程(Functional Programming),又称为泛函编程,是一种编程范式.早在很久以前就提出了函数式编程这个概念了 ...
- Linux性能优化概述
一.Linux性能概述 性能优化是个系统工程,总是牵一发而动全身,它涉及了从程序设计.编程语言,再到系统.存储.网络等各种底层基础设施的方方面面.每一个组件都有可能出问题,而且很有可能多个组件同时出问 ...
- python3发邮件脚本
官方文档中建议保存token,且token是每2小时更新一次. 所以token先保存在本地token.txt文件夹中,设定计划任务每1小时删除一下token.txt.虽然造成了浪费,对于发消息不多的人 ...
- Java高性能本地缓存框架Caffeine
一.序言 Caffeine是一个进程内部缓存框架,使用了Java 8最新的[StampedLock]乐观锁技术,极大提高缓存并发吞吐量,一个高性能的 Java 缓存库,被称为最快缓存. 二.缓存简介 ...
- [编译器]dev c++单步调试
一.dev c++调试崩溃的解决方案 1.点击"工具 -> 编译选项". 2.选择"编译器"选项卡,勾选"编译时加入以下命令",输入& ...
- 习惯用excel却满足不了数据分析的需求怎么办?本文给您方法
Excel 可以说是如今最常用的做分析统计的工具了,简单易用且功能强大,但是excel难以满足一些高端的数据分析需求,主要存在的问题体现在数据共享.数据权限.数据量等方面. 那如果有一款工具既不用你花 ...
- 【C# Parallel】ParallelLoopState
总结 总之,要编写一个健壮的并行循环,必须在并行循环体中检测 ParallelLoopState 对象的 IsExceptional, IsStopped 和 LowestBreakIteration ...
- 利用logrotate工具对catalina.out进行日志分割实战
logrotate是linux自带的日志分割工具,如果没有可以用yum安装 yum -y install logrotate 要配置日志分割定时任务,需要在/etc/logrotate.d/下创建一个 ...