CF1190C Tokitsukaze and Duel
搬运一下本喵的 lg 博客 qwq
详细讲一下如何判定后手能否获胜,对其他题解做个补充。(蒟蒻的我想了好久来着
此题的关键点在于可以重复上一个人的操作使局面保持不变。
考虑先手的获胜条件,由上一段可知若先手不能在第一步获胜,则后手一定可以重复先手的操作,使其回到原来的局面,从而保证自己不败。
考虑后手的获胜条件,与先手同理,若后手不能一步致胜,先手同样可以重复后手的操作。
综上所述,当且仅当其中一人能够一步致胜时,才能获得胜利。
先手
若先手一步致胜,则需保证所选区间以外的数字全部相同。
对于串中的位置 \(i\) ,维护 \(l_i\),\(r_i\) 分别表示其左边及右边在字符相同时的最远位置。
枚举所选长度为 \(k\) 的区间为 \([i,j]\),当 \(l_i=1\),\(r_j=n\) 且 \(a_{i-1}=a_{j+1}\) 时,满足区间外的所有数字相同,可以获胜。
后手
后手获胜,需要保证先手做出任何选择都能使后手一步致胜。
设先手选择的区间为 \([i,j]\) 。把当前局面分成三部分,分别为 \([1,i-1]\),\([i,j]\),\([j+1,n]\) 。后手想要获胜,必须使左右两区间的所有值都与 \([i,j]\) 的值相等。而在一次操作中,后手只能操作其中的一个区间。也就是说,需要保证其中的一个区间值全部与 \([i,j]\) 相等。
当 \(n>2k\) 时, \([1,i-1]\) 和 \([j+1,n]\) 必然有一个长度大于 \(k\)。此时后手无法获胜。
这时候我们会发现一个问题,假设 \([1,i-1]\) 的值全为 \(0\) ,且 \([j+1,n]\) 中不全是同一个值,那么先手只要把 \([i,j]\) 全部变为 \(1\) ,后手还是无法胜利。因此要保证无论先手填的值是什么,都有其中一个区间与之全部相等,就需要左右两个区间一个全是 \(0\),一个全是 \(1\) 。
因此,若存在 \([i,j]\) 不满足 \(l_{i - 1} = 1\) 且 \(r_{j+1} = n\) ,后手无法获胜。
\(code:\)
#include<bits/stdc++.h>
using namespace std;
const int N=1e5+5;
int n,k,a[N];
int l[N],r[N];
char s[N];
int main()
{
scanf("%d%d%s",&n,&k,s+1);
for(int i=1;i<=n;i++)
{
if(s[i]=='0') a[i]=0;
else a[i]=1;
}
l[1]=1;l[0]=1;
for(int i=2;i<=n;i++)
{
if(a[i]==a[i-1]) l[i]=l[i-1];
else l[i]=i;
}
r[n]=n;r[n+1]=n;
for(int i=n-1;i;i--)
{
if(a[i]==a[i+1]) r[i]=r[i+1];
else r[i]=i;
}
for(int i=1;i<=n-k+1;i++)
{
int j=i+k-1;
if(l[i-1]==1&&r[j+1]==n&&a[i-1]==a[j+1])
{
cout<<"tokitsukaze"<<endl;
return 0;
}
}
if(n>2*k)
{
cout<<"once again"<<endl;
return 0;
}
bool flag=0;
for(int i=2;i<=n-k;i++)
{
if(l[i-1]!=1||r[i+1]!=n)
{
cout<<"quailty"<<endl;
return 0;
}
}
cout<<"once again"<<endl;
return 0;
}
CF1190C Tokitsukaze and Duel的更多相关文章
- Codeforces Round #573 (Div. 2) E. Tokitsukaze and Duel (博弈)
time limit per test1 second memory limit per test256 megabytes inputstandard input outputstandard ou ...
- E - Tokitsukaze and Duel CodeForces - 1190C (博弈 + 窗体移动)
"Duel!" Betting on the lovely princess Claris, the duel between Tokitsukaze and Quailty ha ...
- Tokitsukaze and Duel CodeForces - 1191E (博弈论)
大意: 给定01串, 两人轮流操作, Tokitsukaze先手. 每次操作可以选择长为$k$的区间, 全部替换为$0$或$1$, 若替换后同色则赢. 求最后结果. 先判断第一步是否能直接赢, 不能的 ...
- Codeforces 1190C. Tokitsukaze and Duel
传送门 注意到后手可以模仿先手的操作,那么如果一回合之内没法决定胜负则一定 $\text{once again!}$ 考虑如何判断一回合内能否决定胜负 首先如果最左边和最右的 $0$ 或 $1$ 距离 ...
- Codeforces - 1191E - Tokitsukaze and Duel - 博弈论 - 尺取
https://codeforc.es/contest/1191/problem/E 参考自:http://www.mamicode.com/info-detail-2726030.html 和官方题 ...
- Codeforces 1190C Tokitsukaze and Duel game
题意:有一个长为n的01串,两个人轮流操作,每个人可以把某个长度为m的区间变成相同颜色,谁在操作后整个串颜色相同就赢了.问最后是谁赢?(有可能平局) 思路:容易发现,如果第一个人不能一击必胜,那么他就 ...
- C. Tokitsukaze and Duel 前缀维护
枚举每一个连续的K的第一个位置,如果是先手胜利,那么前[1 , i-1 ]和[ i+k , n ]区间要么全是0,要么全是1 如果能够平局,那么肯定是[1,i-1],以及[ i+k , n]中有两种情 ...
- Codeforces Round #573 (Div. 1)
Preface 军训终于结束了回来补一补之前的坑发现很多题目题意都忘记了 这场感觉难度适中,F由于智力不够所以弃了,E的话石乐志看了官方英文题解才发现自己已经胡了一大半就差实现了233 水平下降严重. ...
- Codeforces Round #573 (Div. 2)
A:Tokitsukaze and Enhancement 当时看错条件了..以为A>C>B>D.就胡写了判断条件. #include<bits/stdc++.h> us ...
- CF:322D - Ciel and Duel 贪心 或者 DP 我用的贪心 。。难道sort跟qsort是不一样的么?
D. Ciel and Duel time limit per test 2 seconds memory limit per test 256 megabytes input standard in ...
随机推荐
- [数据分析与可视化] 基于plottable库绘制精美表格
plottable是一个Python库,用于在matplotlib中绘制精美定制的图形表格.plottable的官方仓库地址为:plottable.本文主要参考其官方文档,plottable的官方文档 ...
- 【Kubernetes】kubectl常用命令手册 -- 持续更新
元信息 api列表: kubectl api-resources kubectl api-resources -o wide 用法查询: kubectl explain <>.<&g ...
- 零基础实现Java直播(一):集成
从泛娱乐的秀场直播,到直播带货潮流中的电商直播,直播已经成为2020年最热的应用技术之一,越来越多的产品希望加入直播功能.下面我们基于即构Express Video SDK,来分享如何从零实现线上直播 ...
- ISP图像处理之Demosaic算法及相关
CFA及Demosaic介绍 1.Bayer(拜耳滤波器得到彩色) 图像在将实际的景物转换为图像数据时, 通常是将传感器分别接收红. 绿. 蓝三个分量的信息, 然后将红. 绿. 蓝三个分量的信息合成彩 ...
- Codeforces Round #885 (Div. 2) A-D
比赛链接 A 代码 #include <bits/stdc++.h> using namespace std; using ll = long long; bool solve() { i ...
- 2023-07-20:假设一共有M个车库,编号1~M,时间点从早到晚是从1~T, 一共有N个记录,每一条记录如下{a, b, c}, 表示一辆车在b时间点进入a车库,在c时间点从a车库出去, 一共有K
2023-07-20:假设一共有M个车库,编号1 ~ M,时间点从早到晚是从1 ~ T, 一共有N个记录,每一条记录如下{a, b, c}, 表示一辆车在b时间点进入a车库,在c时间点从a车库出去, ...
- 自定义gradle插件并且发布到本地仓库
转载请标明出处,维权必究:http://77blogs.com/?p=189 一.在工程上新建一个Module. 二.删除其余不必要的文件,最终目录结构如下: 注意:由于我用的是kotlin语言,所以 ...
- Inpaint Anything:一键进行多种图像修补
本文分享自华为云社区<绘制一切>,作者: 雨落无痕 . 绘制一切-Inpaint Anything 相关链接: Notebook案例地址:绘制一切 AI Gallery:https://d ...
- 2021-7-29 MySql进阶
Alter的使用: 列的增加和删减 alter table users add user_name VARCHAR(100);#添加一列在末尾 SELECT * from users; alter t ...
- 清理MySQL的binlog日志
前言 MySQL的binlog是以二进制形式打印的日志,没设置自动删除的话,时间长了就会占用大量存储空间.删除MySQL的binlog日志有两种方法:自动删除和手动删除. 自动删除 永久生效:修改My ...