搬运一下本喵的 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. [ESP] 使用Ayla API Reference配网和连Ayla云

    示例用的文档及链接 US Dev Dashboard(查看oem-id和oem-key) https://dashboard-dev.aylanetworks.com/ Ayla API Refere ...

  2. 【Python】爬虫-Xpath

    Xpath 文章参考:https://www.cnblogs.com/mxjhaima/p/13775844.html#案例 安装 pip install lxml 引用 from lxml impo ...

  3. Valine评论插件因为LeanCloud国内域名解析问题无法正常使用的解决方法

    近日,LeanCloud 国内域名解析存在问题,Valine评论插件的评论内容都储存在LeanCloud,使用Valine评论插件的个人博客的评论及阅读数会显示失败. 关于 LeanCloud 国内域 ...

  4. 【转载】Linux虚拟化KVM-Qemu分析(十)之virtio驱动

    原文信息 作者:LoyenWang 出处:https://www.cnblogs.com/LoyenWang/ 公众号:LoyenWang 版权:本文版权归作者和博客园共有 转载:欢迎转载,但未经作者 ...

  5. .net 6 winform启动器:调用CMD命令行执行dotnet命令启动.net core程序并将控制台输出日志输出到winform textbox实现实时日志显示

    背景 历史遗留问题,生产车间运行的一个.net core signalr程序使用命令行程序启动,经常由于生产人员误操作将光标停留在控制台上导致程序假死,丢失部分测试数据,车间随便找了一台win10系统 ...

  6. oracle用户密码刷新

    1.查询用户信息 col username for a25 col account_status for a18 col profile for a20 select username,account ...

  7. [golang]gin框架接收websocket通信

    前言 WebSocket是一种在单个TCP连接上进行全双工通信的协议.WebSocket让客户端和服务端之间的数据交换变得非常简单,且允许服务器主动向客户端推送数据,并且之后客户端和服务端所有的通信都 ...

  8. Java 日志系列:JUL 使用和原理分析

    目录 一. 简介 二.使用 三.日志级别 四.Logger 继承关系 五.配置文件 六.原理解析 一. 简介 JUL 全称 Java util Logging 是 java 原生的日志框架,使用时不需 ...

  9. 【升职加薪秘籍】我在服务监控方面的实践(6)-业务维度的mysql监控

    大家好,我是蓝胖子,关于性能分析的视频和文章我也大大小小出了有一二十篇了,算是已经有了一个系列,之前的代码已经上传到github.com/HobbyBear/performance-analyze,接 ...

  10. 论文解读(MetaAdapt)《MetaAdapt: Domain Adaptive Few-Shot Misinformation Detection via Meta Learning》

    Note:[ wechat:Y466551 | 可加勿骚扰,付费咨询 ] 论文信息 论文标题:MetaAdapt: Domain Adaptive Few-Shot Misinformation De ...