/*
可以发现一个性质:连续两个相同色块永远不会变色
继而可以发现,这个色段每次迭代都向左向右拓展长度1,直到撞上其他扩张的色段
所以预处理出所有连续色段,然后对于所有不在色段里的点,我们可以预测其最终的颜色:
其本身每次迭代改变一次颜色,如果k>= 离其最近的那个色段到其的距离Len,那么其就会被那个色段覆盖
那么就要预处理出这些点两侧最近的色段距离和颜色 由于是环形,所以扩张两倍即可来求边界
*/
#include<bits/stdc++.h>
#include<vector>
using namespace std;
#define N 400005 int f[N],c[N],k,n,L[N],R[N];
char s[N]; int main(){
cin>>n>>k;
memset(c,0x3f,sizeof c);
scanf("%s",s+);
for(int i=;i<=n;i++)
if(s[i]=='B')c[i]=c[i+n]=;
else c[i]=c[i+n]=;
c[]=c[n];c[*n+]=c[]; for(int i=;i<=*n;i++)
if(c[i]==c[i-] || c[i]==c[i+])
f[i]=;//连续点标记为1 //特判没有连续段,都是连续段
int cnt=;
for(int i=;i<=n;i++)cnt+=f[i];
if(cnt==){//无连续段
if(k%==){
printf("%s",s+);
}
else {
for(int i=;i<=n;i++)
if(s[i]=='B')cout<<'W';
else cout<<'B';
puts("");
}
return ;
}
else if(cnt==n){
printf("%s",s+);
return ;
} //处理左边界
int p=;
while(f[p+]!=)++p;//找到第一个连续色段
for(int i=p+;i<=*n;i++)
if(!f[i])L[i]=p;
else p=i; //处理右边界
p=*n+;
while(f[p-]!=)--p;
for(int i=p-;i>=;i--)
if(!f[i])R[i]=p;
else p=i;
//010011,010011
for(int i=;i<=n;i++){//回到环形上
if(!f[i] && L[i]==)
L[i]=L[i+n];
if(!f[i] && R[i]>n)
R[i]-=n;
} for(int i=;i<=n;i++)
if(f[i]){
cout<<s[i];
}
else {
int disl,disr;
if(L[i]>i)
disl=n-L[i]+i;
else
disl=i-L[i]; if(R[i]<i)
disr=R[i]+n-i;
else
disr=R[i]-i; int dis=min(disl,disr);
if(dis<=k){
if(disl<disr){//被左侧覆盖
if(disl<i)
cout<<s[i-disl];
else cout<<s[i+n-disl];
}
else {//被右侧覆盖
if(i+disr<=n)
cout<<s[i+disr];
else cout<<s[i+disr-n];
}
}
else {
int now=(c[i]+k)%;
if(now==)cout<<"B";
else cout<<"W";
}
}
puts("");
}

思维+双指针+环——cf1244F的更多相关文章

  1. Lyft Level 5 Challenge 2018 - Final Round (Open Div. 2) C. The Tower is Going Home(思维+双指针)

    https://codeforces.com/contest/1075/problem/C 题意 一个宽为1e9*1e9的矩阵中的左下角,放置一个车(车可以移动到同一行或同一列),放置一些墙,竖的占据 ...

  2. Mouse Hunt CodeForces - 1027D(思维 找环)

    Medicine faculty of Berland State University has just finished their admission campaign. As usual, a ...

  3. HDU 6103 Kirinriki (思维 双指针)

    Kirinriki Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total S ...

  4. CodeForces - 1007A (思维+双指针)

    题意 https://vjudge.net/problem/CodeForces-1007A 对一个序列重排,使得新的数比原来的数大对应的位置个数最多. 思路 举个栗子,比如1 2 2 3 3 3 3 ...

  5. Codeforces Global Round 12 D. Rating Compression (思维,双指针)

    题意:给你一长度为\(n\)的数组,有一长度为\(k\ (1\le k \le n)\)的区间不断从左往右扫过这个数组,总共扫\(n\)次,每次扫的区间长度\(k=i\),在扫的过程中,每次取当前区间 ...

  6. 第十二届湖南省赛 (B - 有向无环图 )(拓扑排序+思维)好题

    Bobo 有一个 n 个点,m 条边的有向无环图(即对于任意点 v,不存在从点 v 开始.点 v 结束的路径). 为了方便,点用 1,2,…,n 编号. 设 count(x,y) 表示点 x 到点 y ...

  7. Codeforces Round #513 by Barcelona Bootcamp C. Maximum Subrectangle(双指针+思维)

    https://codeforces.com/contest/1060/problem/C 题意 给两个数组,a数组有n个元素,b数组有m个元素,两个数组元素互相相乘形成n*m的矩阵,找一个子矩阵,元 ...

  8. CodeForces - 103B(思维+dfs找环)

    题意 https://vjudge.net/problem/CodeForces-103B 很久很久以前的一天,一位美男子来到海边,海上狂风大作.美男子希望在海中找到美人鱼 ,但是很不幸他只找到了章鱼 ...

  9. Almost Acyclic Graph CodeForces - 915D (思维+拓扑排序判环)

    Almost Acyclic Graph CodeForces - 915D time limit per test 1 second memory limit per test 256 megaby ...

随机推荐

  1. 【记录】Java NIO实现网络模块遇到的BUG

    1.背景 通过JavaNio实现一个简单的网络模块,有点像Netty的线程模型,一个线程(AcceptThread)建立新连接,把新连接绑定到某个SelectorThread,SelectorThre ...

  2. hdu 3060 Area2 (计算几何模板)

    Problem Description 小白最近又被空军特招为飞行员,参与一项实战演习.演习的内容还是轰炸某个岛屿(这次的岛屿很大,很大很大很大,大到炸弹怎么扔都能完全在岛屿上引爆),看来小白确实是飞 ...

  3. delphi 读写记录类型文件Record

    type personInfo=Record //定义Record Name:String[10]; Age:integer; end; //写记录包括新键与添加记录 procedure WriteR ...

  4. 阿里云Redis 配置

    查看路径whereis redis 1.修改配置文件 vim /etc/redis.conf 这三个配置是必须的 修改内容,把 daemonize no 修改为:daemonize yes requi ...

  5. What size do you use for varchar(MAX) in your parameter declaration?

    What size do you use for varchar(MAX) in your parameter declaration? In this case you use -1. See al ...

  6. python3迷宫,多线程版

    上图: 直接上代码 #!/usr/bin/python3 #coding=GB2312 import tkinter as tk import threading import time import ...

  7. ffmpeg -视频旋转和高清转码示例

    手头有一个竖屏拍摄的视频(真诚建议不要这么做..),导入到电脑上以后势必要把它旋转90°,可是没想到就这样简单的一个功能,尝试了N个非编软件(openshot, pitivi,还有坑爹的lives)后 ...

  8. 8. Jmeter导入jar包

    我们都知道Jmeter是Java编写的,所以有很多时候需要用到Java方面的知识.比如Jmeter前置处理器,就用到了很多Java知识.那么本章我们先介绍如何使用Jmeter导人jar包. 工具准备 ...

  9. jquery 条件搜索某个标签下的子标签

    $("li[name='"+name+"']").find("a[value='" + value + "']").pa ...

  10. C/C++程序员 面试经历总结

    最近在找工作,遇到了一些面试题,很惭愧的是很多都没答上来. 现在把一些问题总结一下,算是记录一下面试的经历吧.以后有空简单地回答一下, 同时也欢迎各位同仁解答,共同学习一下吧!   一.嵌入式C语言面 ...