思维+双指针+环——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命令:rm(5)
rm rm命令可以删除一个目录中的一个或多个文件或目录,也可以将某个目录及其下属的所有文件及其子目录均删除掉.对于链接文件,只是删除整个链接文件,而原有文件保持不变 注意:使用rm命令要格外小心.因为 ...
- zk 后台调用前台点击事件
Events.echoEvent(new Event(Events.ON_CLICK, view.getFellow("showYjdkhMessage"))); showYjdk ...
- 根据一个经纬度坐标获取周边最近经纬。Java实现
1.需求:指定一个经纬度坐标,如:(31.2121751783,121.4411213954).周围有一堆经纬度坐标,找出与它最近的那个. 2.实现思路:将给出经纬度看成原点(0,0).周围经纬度定位 ...
- 修改Mysql数据库的字符集
1.先检查数据库的默认字符集是否是引起不能存储中文的原因: 登录数据库后执行下面的命令 mysql> show variables like 'character%'; 由上图可以看出,data ...
- 2019 pycharm激活码
http://lookdiv.com 里面有,钥匙:1211268069 激活码网址里面有 lookdiv.com 里面的钥匙就是lookdiv.com
- Jmeter beanshell断言 org.json.jar包下载
链接:https://pan.baidu.com/s/1O01ODjlKyqmz2NyDT0MCww 提取码:a5va 欢迎关注微信公众号:软件测试汪,qq技术交流群:809111560
- JVM内存图
- redis基本介绍搭建篇
1.redis基本介绍 1.1 redis介绍 Redis属于非关系型数据库和Memcached类似,redis也是一个key-value型存储系统. 但redis支持的存储value类型相对更多,包 ...
- Django框架(三十)—— 使用Vue搭建前台
目录 vue的使用 一.创建vue项目 二.pycharm开发vue项目 1.安装vue.js插件 2.运行vue项目 三.vue项目的目录结构 四.vue的使用 1.创建新的组件 2.显示数据 3. ...
- sql合并字段
<!-- 对发送方式合并查询 --> <!--查询所有满足条件的营销活动 --> <select id="CRM-MK-ACT-DEFINE-SELECT&qu ...