搬运一下本喵的 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的更多相关文章

  1. Codeforces Round #573 (Div. 2) E. Tokitsukaze and Duel (博弈)

    time limit per test1 second memory limit per test256 megabytes inputstandard input outputstandard ou ...

  2. E - Tokitsukaze and Duel CodeForces - 1190C (博弈 + 窗体移动)

    "Duel!" Betting on the lovely princess Claris, the duel between Tokitsukaze and Quailty ha ...

  3. Tokitsukaze and Duel CodeForces - 1191E (博弈论)

    大意: 给定01串, 两人轮流操作, Tokitsukaze先手. 每次操作可以选择长为$k$的区间, 全部替换为$0$或$1$, 若替换后同色则赢. 求最后结果. 先判断第一步是否能直接赢, 不能的 ...

  4. Codeforces 1190C. Tokitsukaze and Duel

    传送门 注意到后手可以模仿先手的操作,那么如果一回合之内没法决定胜负则一定 $\text{once again!}$ 考虑如何判断一回合内能否决定胜负 首先如果最左边和最右的 $0$ 或 $1$ 距离 ...

  5. Codeforces - 1191E - Tokitsukaze and Duel - 博弈论 - 尺取

    https://codeforc.es/contest/1191/problem/E 参考自:http://www.mamicode.com/info-detail-2726030.html 和官方题 ...

  6. Codeforces 1190C Tokitsukaze and Duel game

    题意:有一个长为n的01串,两个人轮流操作,每个人可以把某个长度为m的区间变成相同颜色,谁在操作后整个串颜色相同就赢了.问最后是谁赢?(有可能平局) 思路:容易发现,如果第一个人不能一击必胜,那么他就 ...

  7. C. Tokitsukaze and Duel 前缀维护

    枚举每一个连续的K的第一个位置,如果是先手胜利,那么前[1 , i-1 ]和[ i+k , n ]区间要么全是0,要么全是1 如果能够平局,那么肯定是[1,i-1],以及[ i+k , n]中有两种情 ...

  8. Codeforces Round #573 (Div. 1)

    Preface 军训终于结束了回来补一补之前的坑发现很多题目题意都忘记了 这场感觉难度适中,F由于智力不够所以弃了,E的话石乐志看了官方英文题解才发现自己已经胡了一大半就差实现了233 水平下降严重. ...

  9. Codeforces Round #573 (Div. 2)

    A:Tokitsukaze and Enhancement 当时看错条件了..以为A>C>B>D.就胡写了判断条件. #include<bits/stdc++.h> us ...

  10. 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 ...

随机推荐

  1. Centos7配置fstp

    Centos7配置fstp 1 创建用户   useradd -m -d /data/sftp_data/user1 -s /usr/sbin/nologin -g sftp user1 -m:自动创 ...

  2. Microsoft edge锁定在任务栏上,被修改主页360的解决方法

    今天从桌面下边的任务栏打开Microsoft edge浏览器,突然发现主页被篡改为360导航了(生气!恶龙咆哮ooo 在桌面上是Microsoft edge,固定到任务栏就成为Microsoft ed ...

  3. 一些重要的sql命令

    SELECT - 从数据库中提取数据 UPDATE - 更新数据库中的数据 DELETE - 从数据库中删除数据 INSERT INTO - 向数据库中插入新数据 CREATE DATABASE - ...

  4. Hugging News #0731: 新课程重磅发布、用户交流群邀请你加入、真实图像编辑方法 LEDTIS 来啦!

    每一周,我们的同事都会向社区的成员们发布一些关于 Hugging Face 相关的更新,包括我们的产品和平台更新.社区活动.学习资源和内容更新.开源库和模型更新等,我们将其称之为「Hugging Ne ...

  5. 王道oj/problem16

    网址:http://oj.lgwenda.com/problem/16 思路:都在注释里,注意增删查的参数以及停止条件 代码: #define _CRT_SECURE_NO_WARNINGS#incl ...

  6. 【动画进阶】有意思的 Emoji 3D 表情切换效果

    最近,群里面的同学发了这么一个非常有意思是动画效果: 原效果地址 -- CodePen Demo -- Letter Hop 当然,原效果,主要使用了 GSAP 动画库以及一个 3D 文字 JavaS ...

  7. c++算法:二分

    算法中,有一种比线性查找算力费得更少的一种算法思想,叫"分治",今天讲的是分治里的二分查找: 借助 (low+high)/2公式,找到搜索区域内的中间元素.图 1 中,搜索区域内中 ...

  8. 解决git出现fatal: detected dubious ownership in repository at XXXXX的错误

    在window环境下,使用git命令时报错fatal: detected dubious ownership in repository at XXXXXX,图片如下 解决方法如下 添加一行代码 gi ...

  9. 《SQL与数据库基础》08. 多表查询

    目录 多表查询 多表关系 一对多 多对多 一对一 多表查询概述 分类 内连接 外连接 自连接 联合查询 子查询 分类 标量子查询 列子查询 行子查询 表子查询 案例 本文以 MySQL 为例 多表查询 ...

  10. ELK环境部署-LogStash数据收集(二)

    一.安装JAVA环境 1.解压jdk压缩包 abc@elk:~$ sudo tar -zxvf jdk-11.0.18_linux-x64_bin.tar.gz -c jdk11 2.添加环境变量 a ...