思维+双指针+环——cf1244F
/*
可以发现一个性质:连续两个相同色块永远不会变色
继而可以发现,这个色段每次迭代都向左向右拓展长度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的更多相关文章
- 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的矩阵中的左下角,放置一个车(车可以移动到同一行或同一列),放置一些墙,竖的占据 ...
- Mouse Hunt CodeForces - 1027D(思维 找环)
Medicine faculty of Berland State University has just finished their admission campaign. As usual, a ...
- HDU 6103 Kirinriki (思维 双指针)
Kirinriki Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total S ...
- CodeForces - 1007A (思维+双指针)
题意 https://vjudge.net/problem/CodeForces-1007A 对一个序列重排,使得新的数比原来的数大对应的位置个数最多. 思路 举个栗子,比如1 2 2 3 3 3 3 ...
- Codeforces Global Round 12 D. Rating Compression (思维,双指针)
题意:给你一长度为\(n\)的数组,有一长度为\(k\ (1\le k \le n)\)的区间不断从左往右扫过这个数组,总共扫\(n\)次,每次扫的区间长度\(k=i\),在扫的过程中,每次取当前区间 ...
- 第十二届湖南省赛 (B - 有向无环图 )(拓扑排序+思维)好题
Bobo 有一个 n 个点,m 条边的有向无环图(即对于任意点 v,不存在从点 v 开始.点 v 结束的路径). 为了方便,点用 1,2,…,n 编号. 设 count(x,y) 表示点 x 到点 y ...
- Codeforces Round #513 by Barcelona Bootcamp C. Maximum Subrectangle(双指针+思维)
https://codeforces.com/contest/1060/problem/C 题意 给两个数组,a数组有n个元素,b数组有m个元素,两个数组元素互相相乘形成n*m的矩阵,找一个子矩阵,元 ...
- CodeForces - 103B(思维+dfs找环)
题意 https://vjudge.net/problem/CodeForces-103B 很久很久以前的一天,一位美男子来到海边,海上狂风大作.美男子希望在海中找到美人鱼 ,但是很不幸他只找到了章鱼 ...
- Almost Acyclic Graph CodeForces - 915D (思维+拓扑排序判环)
Almost Acyclic Graph CodeForces - 915D time limit per test 1 second memory limit per test 256 megaby ...
随机推荐
- 每天一个linux命令:cp(8)
cp cp命令用来将一个或多个源文件或者目录复制到指定的目的文件或目录.它可以将单个源文件复制成一个指定文件名的具体的文件或一个已经存在的目录下.cp命令还支持同时复制多个文件,当一次复制多个文件时, ...
- 自己总结的CSS3中transform变换、transition过渡、animation动画的基本用法
<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8&quo ...
- Who Saw My Blog
I found that my blog has visitors!!! I wonder who has watched my blog and what did they feel at that ...
- CF446D DZY Loves Games
CF446D DZY Loves Games 高斯消元好题 如果暴力地,令f[i][k]表示到i,有k条命的概率,就没法做了. 转化题意 生命取决于经过陷阱的个数 把这个看成一步 所以考虑从一个陷阱到 ...
- 集合类不安全之ArrayList
1. 不安全的ArrayList 大家都知道ArrayList线程不安全,怎么个不安全法呢?上代码: public class ContainerNotSafeDemo { public static ...
- docker 安装 lnmp
docker 安装 lnmp 标签(空格分隔): php,docker 安装MySql 1 搜索镜像 docker search mysql 2 安装镜像 docker pull mysql:5.7 ...
- Tika教程
Apache Tika 是什么? Apache Tika用于文件类型检测和从各种格式的文件内容提取的库. 在内部,Tika使用现有的各种文件解析器和文档类型的检测技术来检测和提取数据. 使用Tika, ...
- 抓取猫眼TOP100的数据
import requests import re import json from multiprocessing import Pool from multiprocessing import M ...
- GNU Linux 64汇编学习
函数调用传参: 第一个参数:rdi, 第二个参数:rsi 函数调用栈结构: 返回值 第一个参数 第二个参数 +----------+ rsp-24 | a | +----------+ rsp-16 ...
- img点击放大的js实现
业务需要,从后台获取图片列表,用img标签展示,由于图片太小看不清,需要点击放大,类似如下效果: 点击后放大(由于图片高度超出了页面,需要通过overflow:auto;设置滚动条,点击放大图片回到列 ...