Codeforces Round #592 (Div. 2) F. Chips 构造 + 细节

传送门

文章目录

  • 题意:
  • 思路:

题意:

在这里插入图片描述

思路:

恶心的构造题,思路很简单但是代码细节很多,搞了半天。
根据题目的性质不难发现,如果有两个相同颜色的球相邻,那么他们的颜色永远不会改变。
根据这个性质,我们将相同颜色的球作为分割点,将其分成若干段,每段都是WBWBWBWBWBWBWBWBWB或者BWBWBWBWBWBWBWBWBW这样交替来的序列,不难发现每次操作只会将其两端的颜色改变,所以直接模拟就好了。注意首端和末端是相连的,还需要特判一下。
还需要注意,如果kkk的次数不能遍历完整个序列,由于序列没有遍历到的部分也是变化的,所以特判一下kkk的奇偶性,让后提前改变一下即可。

UPD:
貌似可以直接记录一下每个位置最少在第几次操作内改变,让后判断一下跟kkk的关系即可。
最后贴了个代码,比我思路好写1W1W1W倍。

// Problem: F. Chips
// Contest: Codeforces - Codeforces Round #592 (Div. 2)
// URL: https://codeforces.com/contest/1244/problem/F
// Memory Limit: 256 MB
// Time Limit: 1000 ms
// 
// Powered by CP Editor (https://cpeditor.org)//#pragma GCC optimize("Ofast,no-stack-protector,unroll-loops,fast-math")
//#pragma GCC target("sse,sse2,sse3,ssse3,sse4.1,sse4.2,avx,avx2,popcnt,tune=native")
//#pragma GCC optimize(2)
#include<cstdio>
#include<iostream>
#include<string>
#include<cstring>
#include<map>
#include<cmath>
#include<cctype>
#include<vector>
#include<set>
#include<queue>
#include<algorithm>
#include<sstream>
#include<ctime>
#include<cstdlib>
#include<random>
#include<cassert>
#define X first
#define Y second
#define L (u<<1)
#define R (u<<1|1)
#define pb push_back
#define mk make_pair
#define Mid ((tr[u].l+tr[u].r)>>1)
#define Len(u) (tr[u].r-tr[u].l+1)
#define random(a,b) ((a)+rand()%((b)-(a)+1))
#define db puts("---")
using namespace std;//void rd_cre() { freopen("d://dp//data.txt","w",stdout); srand(time(NULL)); }
//void rd_ac() { freopen("d://dp//data.txt","r",stdin); freopen("d://dp//AC.txt","w",stdout); }
//void rd_wa() { freopen("d://dp//data.txt","r",stdin); freopen("d://dp//WA.txt","w",stdout); }typedef long long LL;
typedef unsigned long long ULL;
typedef pair<int,int> PII;const int N=1000010,mod=1e9+7,INF=0x3f3f3f3f;
const double eps=1e-6;int n,k;
char s[N];
char ans[N];
bool st[N];bool check() {for(int i=0;i<n;i++) if(st[i]) return true;return false;
}int main()
{
//	ios::sync_with_stdio(false);
//	cin.tie(0);cin>>n>>k>>(s);for(int i=0;i<n;i++) {if(s[i]==s[(i-1+n)%n]||s[i]==s[(i+1)%n]) st[i]=true;}if(!check()) {k%=2;if(k) {for(int i=0;i<n;i++) if(s[i]=='B') s[i]='W'; else s[i]='B';}printf("%s\n",s);} else {int end=n-1,begin=0;while(!st[begin]) begin++; begin--;while(!st[end]) end--; end++;if(k%2==1) {for(int i=0;i<=begin;i++) if(s[i]=='B') s[i]='W'; else s[i]='B';for(int i=end;i<n;i++) if(s[i]=='B') s[i]='W'; else s[i]='B';}int cnt=begin+1+n-end;begin+=n; begin%=n; end%=n;for(int l=end,r=begin,t=k;cnt>0&&t;t--,cnt-=2) {char ls=s[(l-1+n)%n],rs=s[(r+1)%n];s[l]=ls; s[r]=rs;l++; r--;r+=n; r%=n; l%=n;}end--; begin++; end+=n; end%=n; begin%=n;for(int i=begin;i<=end;i++) {if(st[i]) continue;int l=i;int cnt=0;while(i<=end&&!st[i]) cnt++,i++; i--;int r=l+cnt-1;if(k%2==1) {for(int i=l;i<=r;i++) if(s[i]=='B') s[i]='W'; else s[i]='B';}for(int t=k;t&&l<=r;t--) {char ls=s[(l-1+n)%n],rs=s[(r+1)%n];s[l]=ls; s[r]=rs;l++; r--;}}printf("%s\n",s);}return 0;
}
/*
16 7
WBBWBWWBBWBWWBWW
WBBBWWWBBBWWWWWW
*/
// Problem: F. Chips
// Contest: Codeforces - Codeforces Round #592 (Div. 2)
// URL: https://codeforces.com/contest/1244/problem/F
// Memory Limit: 256 MB
// Time Limit: 1000 ms
// 
// Powered by CP Editor (https://cpeditor.org)//#pragma GCC optimize("Ofast,no-stack-protector,unroll-loops,fast-math")
//#pragma GCC target("sse,sse2,sse3,ssse3,sse4.1,sse4.2,avx,avx2,popcnt,tune=native")
//#pragma GCC optimize(2)
#include<cstdio>
#include<iostream>
#include<string>
#include<cstring>
#include<map>
#include<cmath>
#include<cctype>
#include<vector>
#include<set>
#include<queue>
#include<algorithm>
#include<sstream>
#include<ctime>
#include<cstdlib>
#include<random>
#include<cassert>
#define X first
#define Y second
#define L (u<<1)
#define R (u<<1|1)
#define pb push_back
#define mk make_pair
#define Mid ((tr[u].l+tr[u].r)>>1)
#define Len(u) (tr[u].r-tr[u].l+1)
#define random(a,b) ((a)+rand()%((b)-(a)+1))
#define db puts("---")
using namespace std;//void rd_cre() { freopen("d://dp//data.txt","w",stdout); srand(time(NULL)); }
//void rd_ac() { freopen("d://dp//data.txt","r",stdin); freopen("d://dp//AC.txt","w",stdout); }
//void rd_wa() { freopen("d://dp//data.txt","r",stdin); freopen("d://dp//WA.txt","w",stdout); }typedef long long LL;
typedef unsigned long long ULL;
typedef pair<int,int> PII;const int N=1000010,mod=1e9+7,INF=0x3f3f3f3f;
const double eps=1e-6;int n,k;
char s[N];
char ans[N];
bool st[N];
int op[N];
char change[N];bool check() {for(int i=0;i<n;i++) if(st[i]) return true;return false;
}int main()
{
//	ios::sync_with_stdio(false);
//	cin.tie(0);cin>>n>>k>>(s);for(int i=0;i<n;i++) {if(s[i]==s[(i-1+n)%n]||s[i]==s[(i+1)%n]) st[i]=true;}if(!check()) {k%=2;if(k) {for(int i=0;i<n;i++) if(s[i]=='B') s[i]='W'; else s[i]='B';}printf("%s\n",s);} else {memset(op,0x3f,sizeof(op));for(int i=0;i<n;i++) {int cnt,now;			if(st[i]&&!st[(i+1)%n]) {now=(i+1)%n; cnt=0;while(!st[now]) {cnt++;if(op[now]>cnt) {op[now]=cnt;change[now]=s[i];}now++; now%=n;}} if(st[i]&&!st[(i-1+n)%n]) {now=(i-1+n)%n; cnt=0;while(!st[now]) {cnt++;if(op[now]>cnt) {op[now]=cnt;change[now]=s[i];}now--; now+=n; now%=n;}}}for(int i=0;i<n;i++) {if(op[i]<=k) {s[i]=change[i];} else {if(op[i]!=INF&&k%2==1) {if(s[i]=='W') s[i]='B';else s[i]='W';}}}printf("%s\n",s);}return 0;
}
/*
16 7
WBBWBWWBBWBWWBWW
WBBBWWWBBBWWWWWW
*/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/314839.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

.NET CORE 多语言实现方案

根据市场需求&#xff0c;基于.NET CORE平台开发的RoadFlow工作流平台需要实现多语言版本。经过方案讨论和比对&#xff0c;决定采用.NET自带的本地化功能来实现多语言。话不多说&#xff0c;直接上实现方式。首先修改Startup.cs在public void ConfigureServices(IServiceColle…

【CTSC2018】暴力写挂【边分治】【虚树】

题意&#xff1a;给两棵基于同一点集的带边权树&#xff0c;记 lca⁡(x,y),depth⁡(x)\operatorname{lca}(x,y),\operatorname{depth}(x)lca(x,y),depth(x) 为第一棵树上的 lca、到根的边长度之和&#xff0c;lca⁡′(x,y),depth⁡′(x)\operatorname{lca}(x,y),\operatorname{…

hdu 6153 A Secret kmp + dp

传送门 文章目录题意&#xff1a;思路&#xff1a;题意&#xff1a; 给你两个串a,ba,ba,b&#xff0c;让你求对于bbb的每个后缀&#xff0c;设其长度为lenlenlen&#xff0c;其在aaa中出现的次数为cntcntcnt&#xff0c;那么他的贡献为len∗cntlen*cntlen∗cnt&#xff0c;求每…

中国程序员,请挺起你的腰杆!

这两天发生一个事&#xff0c;登月50周年之际&#xff0c;阿波罗11号制导计算机&#xff08;AGC&#xff09;指令和登月模块的源代码在Github上发布公开了&#xff0c;大量中国人前往围观&#xff0c;把issues区当成了论坛版块灌水留言。猎奇起哄本为消遣作乐&#xff0c;有不妥…

【BZOJ3252】攻略【闵可夫斯基和】【堆启发式合并】

题意&#xff1a;给一棵 nnn 个点的有点权的树&#xff0c;你需要找 kkk 条根到叶子的路径&#xff0c;使得路径并集的权值和最大。 n≤2105n\leq 2\times 10^5n≤2105 其实就是个贪心&#xff0c;只是从这个角度更自然一点( 先有个显然的 dp&#xff0c;设 f(u,k)f(u,k)f(u,…

Codeforces Round #592 (Div. 2) G. Running in Pairs 构造(水)

传送门 文章目录题意&#xff1a;思路&#xff1a;题意&#xff1a; 思路&#xff1a; 史上最水GGG题&#xff0c;没有之一。 考虑最小的情况如何构造&#xff0c;显然就是让a,ba,ba,b都1−n1-n1−n依次排列即可&#xff0c;这样的最小值为n∗(n1)2\frac{n*(n1)}{2}2n∗(n1)​…

Async,Await和ConfigureAwait的关系

在.NET Framework 4.5中&#xff0c;async / await关键字已添加到该版本中&#xff0c;简化多线程操作&#xff0c;以使异步编程更易于使用。为了最大化利用资源而不挂起UI&#xff0c;你应该尽可能地尝试使用异步编程。虽然async / await让异步编程更简单&#xff0c;但是有一…

【洛谷P5114】八月脸【边分治】【闵可夫斯基和】

题意&#xff1a;一棵 nnn 个点的树&#xff0c;每个点有两个权值 ai,bia_i,b_iai​,bi​&#xff0c;有黑白两种颜色。mmm 次询问&#xff0c;每次给定一个 kkk,求一条端点异色的路径&#xff0c;使得 k∑ai∑bik\sum a_i\sum b_ik∑ai​∑bi​ 最大化。 n≤2105n\leq 2\times…

Educational Codeforces Round 75 (Rated for Div. 2) E2. Voting (Hard Version) 贪心

传送门 文章目录题意&#xff1a;思路&#xff1a;题意&#xff1a; n≤2e5,m≤n,p≤1e9n\le2e5,m\le n,p\le 1e9n≤2e5,m≤n,p≤1e9 思路&#xff1a; 首先需要发现一些性质&#xff0c;假设preipre_iprei​代表所有mj<im_j< imj​<i的pjp_jpj​和。可以发现&#…

【招聘(深圳)】敢为软件技术有限公司 .Net 工程师

敢为软件介绍&#xff1a;深圳市敢为软件技术有限公司致力于打造面向未来的最酷最具影响力的高科技公司。敢为软件在万物互联、行业应用、大屏可视化及自然交互等方面形成完整的闭环&#xff0c;是物联网领域连接能力最强、应用领域最广、用户体验最好的高科技公司。在万物互联…

【WC2018】通道【边分治】【虚树】【树的直径】

题意&#xff1a;给三棵基于同一点集的带边权的树&#xff0c;边权非负&#xff0c;求两点间三棵树上距离之和的最大值。 n≤105n\leq 10^5n≤105 一句话题解&#xff1a;在第一棵树上做边分治&#xff0c;丢到第二棵树上建虚树&#xff0c;在虚树上根据第三棵树的直径dp。 首…

DevOps案例研究:知人善任——Google敏捷核心文化

内容来源&#xff1a;DevOps案例深度研究-Google敏捷实践战队&#xff0c;本文只展示部分PPT及研究成果&#xff0c;更多细节请关注案例分享会。本文内容贡献者&#xff1a;陈霁、刘翀、谈佳婧、张霖。阅读干货前先感受一下热烈的氛围~一、Google如何快速交付原型1.1 Savioke公…

Educational Codeforces Round 111 (Rated for Div. 2) E. Stringforces 二分 + 状压dp

传送门 文章目录题意&#xff1a;思路&#xff1a;题意&#xff1a; 给你一个串&#xff0c;只包含前kkk个字母和&#xff1f;&#xff1f;&#xff1f;&#xff0c;定义fif_ifi​表示第iii个字母在串中出现的最长连续长度&#xff0c;你现在需要将???替换为前kkk个字母&am…

MTT 学习笔记

很久以前就听说了这东西&#xff0c;一直没空学。最近重学多项式&#xff0c;就重新搞了一下。 MTT 主要解决的是任意模数&#xff08;或者说是没有模数&#xff09;的多项式乘法&#xff0c;可以用于应对专门恶心人的毒瘤题。 首先&#xff0c;假设多项式次数 10510^5105,值…

在 VS Code 中轻松 review GitHub Pull Requests

相信大家在平时工作或者自己的项目中&#xff0c;一定都有在 GitHub 上进行 Code Review 的经历。对于韩老师来说&#xff0c;不论是平时工作的项目&#xff0c;还是自己的业余项目&#xff0c;代码基本都是在 GitHub 上。所以&#xff0c;在 GitHub 上进行 Pull Requests 的 C…

Codeforces Round #732 (Div. 2) C. AquaMoon and Strange Sort 思维

传送门 文章目录题意&#xff1a;思路&#xff1a;题意&#xff1a; 给你nnn个数&#xff0c;每个数初始方向是向右&#xff0c;每次可以交换相邻两个位置并且将这两个位置的方向调换&#xff0c;问这个序列的最终状态能否是非递减且方向都向右。 n≤1e5,ai≤1e5n\le1e5,a_i\l…

【CC November Challenge 2012】Arithmetic Progressions【分块】【FFT】

题意&#xff1a;给定长度为 nnn 的正整数序列 AAA,求满足 i<j<k,Aj−AiAk−Aji<j<k,A_j-A_iA_k-A_ji<j<k,Aj​−Ai​Ak​−Aj​ 的三元组个数。 n≤105,Ai≤3104n\leq 10^5,A_i\leq 3\times 10^4n≤105,Ai​≤3104 三个位置只有 jjj 限制比较紧&#xff0c…

火热的云原生到底是什么?一文了解云原生四要素!

所谓云原生&#xff0c;它不是一个产品&#xff0c;而是一套技术体系和一套方法论&#xff0c;而数字化转型是思想先行&#xff0c;从内到外的整体变革。更确切地说&#xff0c;它是一种文化&#xff0c;更是一种潮流&#xff0c;是云计算的一个必然导向。随着虚拟化技术的成熟…

Codeforces Round #732 (Div. 2) D. AquaMoon and Chess 组合数学 + 找规律

传送门 文章目录题意&#xff1a;思路&#xff1a;题意&#xff1a; 给你一个010101串&#xff0c;当且仅当某个111的某一边i1,i−1i1,i-1i1,i−1有111&#xff0c;这个111可以跟i2,i−2i2,i-2i2,i−2交换位置&#xff0c;问最终能产生多少状态。 n≤1e5n\le1e5n≤1e5 思路&a…

为什么说拥抱.NET CORE的时候到了

微软和社区已经做了大量艰苦的工作&#xff0c;使.Net Core成为市场上具有竞争力的框架&#xff0c;帮助开发人员快速开发具有最佳性能和可扩展性的强大应用程序。做的最棒的事情是.Net Framework开发人员不需要任何新知识来处理.Net Core。这也是开发人员在很短的时间内采用.N…