C. Tokitsukaze and Duel 前缀维护
枚举每一个连续的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 前缀维护的更多相关文章
- Codeforces Round #573 (Div. 2) E. Tokitsukaze and Duel (博弈)
time limit per test1 second memory limit per test256 megabytes inputstandard input outputstandard ou ...
- Codeforces - 1191E - Tokitsukaze and Duel - 博弈论 - 尺取
https://codeforc.es/contest/1191/problem/E 参考自:http://www.mamicode.com/info-detail-2726030.html 和官方题 ...
- 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 1190C Tokitsukaze and Duel game
题意:有一个长为n的01串,两个人轮流操作,每个人可以把某个长度为m的区间变成相同颜色,谁在操作后整个串颜色相同就赢了.问最后是谁赢?(有可能平局) 思路:容易发现,如果第一个人不能一击必胜,那么他就 ...
- 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),从而数组 ...
- 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 ...
随机推荐
- springmvc 使用poi解析excel并通过hibernate连续插入多条数据 实际数据库只能保存最后一条
有一个原始数据的excel表 用poi解析之后通过hibernate插数据库 结果 后来发现,有人说 果断尝试 问题解决 但是这好像并不是真正解决问题,只是解决了一个现象 因为有人说 https:// ...
- 【AHOI2013复仇】从一道题来看DFS及其优化的一般步骤和数组分层问题【转】
http://www.cppblog.com/MatoNo1/archive/2012/09/23/191708.html —————————————————————————————————————— ...
- CPU 和内存 $ free -m$ uptime$ top$ htop
注意以下问题: 还有空余的内存吗? 服务器是否正在内存和硬盘之间进行swap? 还有剩余的CPU吗? 服务器是几核的? 是否有某些CPU核负载过多了? 服务器最大的负载来自什么地方? 平均负载是多少?
- linux环境变量设置命令
1echo $ <变量名> //显示某个环境变量 2env // environment (环境) 的简写,列出来所有的环境变量 3set //显示所有本地定义的Shell ...
- sar网络统计数据
sar是一个研究磁盘I/O的优秀工具.以下是sar磁盘I/O输出的一个示例. 第一行-d显示磁盘I/O信息,5 2选项是间隔和迭代,就像sar数据收集器那样.表3-3列出了字段和说明. 表3-3 ...
- API安全验证之JWT(JSON WEB TOKEN) OLCMS
假如www.olcms.com/getUserInfo获取用户信息,你怎么知道当前用户是谁?有人说登陆时候我把他UID写入session了,如果是API接口,没有session怎么办,那么就需要把UI ...
- 由一道面试题引起的arguments的思考
写一个按照下面方式调用都能正常工作的 sum 方法 console.log(sum(2,3)); // Outputs 5 console.log(sum(2)(3)); // Outputs 5从这 ...
- Thread.sleep( ) vs Thread.yield( )
Thread.sleep() The current thread changes state from Running to Waiting/Blocked as shown in the diag ...
- 算法复杂度表示(大O表示法)
- 概念: 大O表示法:称一个函数g(n)是O(f(n)),当且仅当存在常数c>0和n0>=1,对一切n>n0均有|g(n)|<=c|f(n)|成立,也称函数g(n)以 ...
- web服务器与tomcat
web服务器与tomcat 服务器分类: 硬件服务器和软件服务器 web服务器: 提供资源供别人访问 web: 网页的意思,资源. web资源分类: 动态的web资源:内容有可能发生改变的 静态的we ...