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…

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

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

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;但是有一…

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​和。可以发现&#…

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

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

在 VS Code 中轻松 review GitHub Pull Requests

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

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

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

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

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

程序员如何学习英语

首先&#xff0c;这不是一篇广告&#xff0c;虽然这个标题很像。其次&#xff0c;我的英语水平也很一般&#xff0c;所以更多的是谈谈一些失败的经历和思考&#xff0c;俗话说&#xff0c;成功的经验不可复制&#xff0c;失败的经验倒可以让我们少走弯路。英语的重要性毋庸置疑…

使用Azure云原生构建博客是怎样一种体验?(上篇)

点击上方蓝字关注“汪宇杰博客”导语https://edi.wang我的网站是在.NET Core 平台上使用 C#语言编写的开源博客系统&#xff0c;运行于微软智慧云 Azure 国际版上。本文将重点介绍 Azure 的各项服务如何为博客带来丝滑体验与保驾护航。历史回顾我博客的历史可以追溯到2003年&am…

Orleans 知多少 | 2. 核心概念一览

Orleans 术语解读上面这张图中包含了Orleans中的几个核心概念&#xff1a;GrainSiloOrleans ClusterOrleans Client从这张图&#xff0c;我们应该能理清他们之间的关系。Grain作为最小的执行单元Silo 是 Grain 的宿主运行环境&#xff0c;用来暴露具体的服务Orleans Server 提供…

动手造轮子:实现一个简单的 EventBus

动手造轮子&#xff1a;实现一个简单的 EventBusIntroEventBus 是一种事件发布订阅模式&#xff0c;通过 EventBus 我们可以很方便的实现解耦&#xff0c;将事件的发起和事件的处理的很好的分隔开来&#xff0c;很好的实现解耦。微软官方的示例项目 EShopOnContainers 也有在使…

通过 nginx-proxy 实现自动反向代理和 HTTPS

本章节代码已经上传至 https://github.com/siegrainwong/.NET-Core-with-Docker/tree/master/Part3系列大纲这次我们讲第三篇&#xff1a;用 docker-compose 启动 WebApi 和 SQL Server在容器中集成 Skywalking APM通过 nginx-proxy 对 Portainer、Skywalking、WebApi 实现自动…

P4781 【模板】拉格朗日插值

传送门 把公式实现一下即可&#xff1a; 当xxx连续的时候可以优化为O(N)O(N)O(N)。 // Problem: P4781 【模板】拉格朗日插值 // Contest: Luogu // URL: https://www.luogu.com.cn/problem/P4781 // Memory Limit: 125 MB // Time Limit: 1000 ms // // Powered by CP Edi…

MediatR-进程内的消息通信框架

MediatR是一款进程内的消息订阅、发布框架&#xff0c;提供了Send方法用于发布到单个处理程序、Publish方法发布到多个处理程序&#xff0c;使用起来非常方便。目前支持 .NET Framework4.5、.NET Stardand1.3、.NET Stardand2.0等版本&#xff0c;可跨平台使用。要在项目中使用…

不好意思,这么久没有更新《从零开始掌握ASP.NET Core 》

点击上方蓝字&#xff0c;关注「我们」等了快个月了&#xff0c;终于开始更新了。因为感冒&#xff0c;弄的嗓子有点沙哑。所以停了半个月才是更新&#xff0c;目前一口气更新了12个章节&#xff0c;大家可以耐心观看内容了。《从零开始学ASP.NET Core 》-- 更新通知视频课程更…

使用Azure云原生构建博客是怎样一种体验?(下篇)

点击上方蓝字关注“汪宇杰博客”接上篇《使用Azure云原生构建博客是怎样一种体验&#xff1f;&#xff08;上篇&#xff09;》DNSAzure DNS 是一套分布全球的域名解析服务。具有超高可用性和接近实时的记录更新及生效速度。我的博客也使用了这项服务。Azure 现在可以提供域名注…

2021牛客暑期多校训练营1 G Game of Swapping Numbers 思维 + 巧妙的转换

传送门 文章目录题意&#xff1a;思路&#xff1a;题意&#xff1a; 给你两个数组A,BA,BA,B&#xff0c;你可以选择AAA的两个位置i,j,i<ji,j,i<ji,j,i<j交换Ai,AjA_i,A_jAi​,Aj​&#xff0c;需要交换正好kkk次&#xff0c;问你最大的∑i1n∣Ai−Bi∣\sum_{i1}^n|A_…

.NET Core 3.0之深入源码理解HttpClientFactory(一)

写在前面创建HttpClient实例的时候&#xff0c;在内部会创建HttpMessageHandler链&#xff0c;我们知道HttpMessageHandler是负责建立连接的抽象处理程序&#xff0c;所以HttpClient的维护实际上就是维护HttpMessageHandler的使用&#xff0c;释放HttpClient并不会及时释放连接…