枚举每一个连续的K的第一个位置,如果是先手胜利,那么前[1 , i-1 ]和[ i+k , n ]区间要么全是0,要么全是1

如果能够平局,那么肯定是[1,i-1],以及[ i+k , n]中有两种情况

有一个区间全为0,并且另外有个区间内部最左边的1和最右边的1距离是大于K

有一个区间全为1,并且另外有一个区间内部最左边的0和最右边的0的距离是大于K

或者两个区间均有1或者均有0

如何后手胜利,那么肯定没有平局出现,也就意味着

有一个区间全为0,并且另外有个区间内部最左边的1和最右边的1距离是大于K

有一个区间全为1,并且另外有一个区间内部最左边的0和最右边的0的距离是大于K

由于不带修改,我们可以很简单维护i位置

左边第一次出现1的位置,左边第一次出现0的位置

右边第一次出现1的位置,右边第一次出现0的位置

然后o(n)判断即可,这也算是比较优秀的做法了吧。。。

#include<iostream>
#include<string.h>
#include<algorithm>
#include<stdio.h>
using namespace std;
const int maxx = 2e5+;
int l1[maxx];
int l0[maxx];
int r1[maxx];
int r0[maxx];
char s[maxx];
int main(){
int n,k;
while(~scanf("%d%d",&n,&k)){
scanf("%s",s+);
for (int i=;i<=n;i++){
if (s[i]==''){
l1[i]=i;
l0[i]=l0[i-];
}else {
l0[i]=i;
l1[i]=l1[i-];
}
}
r0[n+]=n+;
r1[n+]=n+;
for (int i=n;i>=;i--){
if (s[i]==''){
r1[i]=i;
r0[i]=r0[i+];
}else {
r0[i]=i;
r1[i]=r1[i+];
}
}
int flag=;
for (int i=;i<=n-k+;i++){
int ll=;
int lr=i-;
int rl=i+k;
int rr=n;
if(l1[i-]== && r1[i+k]==n+){
flag=min(flag,);
}
if(l0[i-]== && r0[i+k]==n+){
flag=min(flag,);
}
if (l1[i-]== && l0[n]-r0[i+k]+<=k){
flag=min(flag,);
}
if (l0[i-]== && l1[n]-r1[i+k]+<=k){
flag=min(flag,);
}
if (r0[n+k]== && l1[i-]-r1[]+<=k){
flag=min(flag,);
}
if (r1[n+k]== && l0[i-]-r0[]+<=k){
flag=min(flag,);
}
if (r1[n+k]== && l0[i-]-r0[]+>k){
flag=min(flag,);
}
if (r0[n+k]== && l1[i-]-r1[]+>k){
flag=min(flag,);
}
if (l1[i-]== && l0[n]-r0[i+k]+>k){
flag=min(flag,);
}
if (l0[i-]== && l1[n]-r1[i+k]+>k){
flag=min(flag,);
}
if (l1[i-]!= && r1[i+k]!=n+){
flag=min(flag,);
}
if (l0[i-]!= && r0[i+k]!=n+){
flag=min(flag,);
}
}
if (flag==){
printf("tokitsukaze\n");
}else if (flag==){
printf("once again\n");
}else {
printf("quailty\n");
}
}
return ;
}

C. 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. Codeforces - 1191E - Tokitsukaze and Duel - 博弈论 - 尺取

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

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

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

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

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

  5. Codeforces 1190C. Tokitsukaze and Duel

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

  6. Codeforces 1190C Tokitsukaze and Duel game

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

  7. hdu 6794 Tokitsukaze and Multiple 前缀和思想+思维

    题意: t组输入,给你一个长度为n的数组,你每次可以从数组中找到a[i]和a[i+1],然后用a[i]+a[i+1]这个新元素来覆盖掉a[i]和a[i+1]的位置(1<=i<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 ...

随机推荐

  1. python中os模块简介

    一.什么是os模块 os模块提供了多数操作系统的功能接口函数.当os模块被导入后,它会自适应于不同的操作系统平台,根据不同的平台进行相应的操作,在python编程时,经常和文件.目录打交道,所以离不了 ...

  2. 【洛谷P2907】 【USACO08OPEN】农场周围的道路 水模拟分治

    P2907 [USACO08OPEN]农场周围的道路Roads Around The Farm 题目描述 Farmer John's cows have taken an interest in ex ...

  3. 【模板】tyvjP1520 树的直径 [2017年5月计划 清北学堂51精英班Day3]

    P1520 树的直径 时间: 1000ms / 空间: 131072KiB / Java类名: Main 描述 树的直径,即这棵树中距离最远的两个结点的距离.每两个相邻的结点的距离为1,即父亲结点与儿 ...

  4. 洛谷P2903 [USACO08MAR]麻烦的干草打包机The Loathesome Hay Baler

    P2903 [USACO08MAR]麻烦的干草打包机The Loathesome Hay Baler 题目描述 Farmer John has purchased the world's most l ...

  5. Cron定时任务应用到Thinkphp – 贤生博客

    Cron定时任务应用到Thinkphp 安装crontab: yum install crontabs 关于cron的一些命令: /sbin/service crond start //启动服务 /s ...

  6. c++中merge的操作

    merge:将两个有序序列合并成一个新的序列,并对新的序列排序 所在库:<algorithm> 注意:排序规则必须和原序列规则相同.存储时下标从0开始. 函数参数:merge(first1 ...

  7. Ubuntu的网络共享

    实际场景 公司项目中遇到一个场景:Ubuntu的主机上装了个4G卡(USB模式),需要将这个4G网共享给一个AP,使得所有连接AP的移动设备都可以通过4G上外网 方法很简单: 1. 将4G网口之外的另 ...

  8. win10下安装mongodb(解压版)

    首先到官网下载安装包.(https://www.mongodb.com/download-center#community) 1.创建mongodb目录 2.配置文件mongodb.config 3. ...

  9. spark-ML之朴素贝叶斯

    训练语料格式 自定义五个类别及其标签:0 运费.1 寄件.2 人工.3 改单.4 催单.5 其他业务类. 从原数据中挑选一部分作为训练语料和测试语料  建立模型测试并保存 import org.apa ...

  10. php表单传值--GET和POST

    一.       传值 1.    传值/接收方法: 1)        GET(5种方式!) a)       表单Form: method = ‘get’   GET接收数据方式: b)      ...