Codeforces 1082B Vova and Trophies(前缀+后缀)
题目链接:Vova and Trophies
题意:给定长度为n的字符串s,字符串中只有G和S,只允许最多一次操作:任意位置的两个字符互换。求连续G的最长长度。
题解:维护pre和pr,nxt和nx。pre和nxt像连续子段和一样维护G的个数,pr和nx维护分别前面和后面各有多少个G。
遍历每个位置i,pre[i-1]+nxt[i+1],判断当前位置i能不能用多余的G来替换,pr和nx判断一下是否与pre和nxt相同即可,过程中更新答案。
1 #include <cstdio> 2 #include <algorithm> 3 using namespace std; 4 5 const int N=2e5+10; 6 typedef long long ll; 7 8 char s[N]; 9 ll pr[N],nx[N]; 10 ll pre[N],nxt[N]; 11 12 int main(){ 13 int n; 14 ll ans=0; 15 scanf("%d%s",&n,s+1); 16 for(int i=1;i<=n;i++){ 17 pr[i]=pr[i-1]; 18 if(s[i]=='G') pre[i]=pre[i-1]+1,pr[i]++; 19 else pre[i]=0; 20 } 21 for(int i=n;i>=1;i--){ 22 nx[i]=nx[i+1]; 23 if(s[i]=='G') nxt[i]=nxt[i+1]+1,nx[i]++; 24 else nxt[i]=0; 25 } 26 for(int i=1;i<=n;i++){ 27 ll sum=0; 28 sum=pre[i-1]+nxt[i+1]; 29 if(s[i]=='G') ans=max(ans,sum+1); 30 else{ 31 if(pr[i-1]!=pre[i-1]||nx[i+1]!=nxt[i+1]) sum++; 32 ans=max(ans,sum); 33 } 34 } 35 printf("%lld\n",ans); 36 return 0; 37 }
View Code
转载于:https://www.cnblogs.com/ehanla/p/10039757.html
Codeforces 1082B Vova and Trophies(前缀+后缀)相关推荐
- CodeForces - 1082B Vova and Trophies
传送 题意:一个只包含G和S的字符串,一次交换能使连续的G最长为多少. 思路:想要使只包含G的子串最长,显然贪心地将两个子串中间的S与一个不在子串的G交换再与最大值比较就可以了,要注意除了这两个子串外 ...
- CF 1082B Vova and Trophies
题目:Vova and Trophies 思路: 如果有两块G中间只隔一个S,就把它和一个G交换. 否则就移一个S到最长的那一块旁边. 代码: #include<bits/stdc++.h> ...
- Educational Codeforces Round 55 (Rated for Div. 2) B. Vova and Trophies 【贪心 】
传送门:http://codeforces.com/contest/1082/problem/B B. Vova and Trophies time limit per test 2 seconds ...
- 【POJ - 2752】Seek the Name, Seek the Fame (KMP,公共前缀后缀长度及个数)
题干: The little cat is so famous, that many couples tramp over hill and dale to Byteland, and asked t ...
- java中获得词根的方法_分析在各大考纲词汇中同时拥有前缀后缀和词根的词(一)...
CET4.CET6.GRE.IELTS.TOEFL.考研英语总的词汇量为14055,有11544个单词含有词根信息,有5526个单词含有前缀信息,有9525个单词含有后缀信息.那么有多少个单词同时拥有 ...
- Rvit中添加尺寸标注的前缀后缀和【一键尺寸定位标注】
一.Rvit中如何添加尺寸标注的前缀后缀 在进行尺寸标注尤其是多段连续的尺寸标注时常会用到诸如:3x2000=6000的标注样式,在Revt中应如何实现? 我们可以采用以下方法来解决: 1.如图1所示 ...
- 字符串最长公共前缀后缀长度
首先,要了解两个概念:"前缀"和"后缀". "前缀"指除了最后一个字符以外,一个字符串的全部头部组合:"后缀"指除了第一 ...
- 我的世界服务器世界前缀修改,大佬教你如何给玩家添加名字前缀后缀
下面小编为大家带来我的世界添加名字前缀后缀攻略,相信好多玩家都非常的想知道,那么想知道的玩家一定要看下面的内容! 作者:Msure 很多玩家见过有些地图中有玩家名字可以获得前缀,如图: 那么下面给出详 ...
- 【MySQL】利用Concat()函数在某一列字段批量添加前缀后缀
一.MySQL中的Concat()函数 1. 含义: 将多个字符串连接成一个字符串. 2. 语法: concat(str1, str2,-) 返回结果为连接参数产生的字符串,如果有任何一个参数为nul ...
- jQuery EasyUI/TopJUI基本的数字输入框(保留两位小数,带前缀后缀...)
jQuery EasyUI/TopJUI基本的数字输入框(保留两位小数,带前缀后缀...) numberbox(数值输入框) HTML required:必填字段,默认为false:prompt:显示 ...
最新文章
- 常用的富文本框插件FreeTextBox、CuteEditor、CKEditor、FCKEditor、TinyMCE、KindEditor ;和CKEditor实例...
- Cesium源码编译过程
- android查看存储占用,Android获取App内存使用情况的方法
- 2019全球AI人才报告发布:AI专家仅3.6万
- 老web换新枝----Sails.js移动设备的全新生产力(五)
- android录音播放列表,android数据库里的视频,图片,音频表
- Oracle归档日志与非归档日志的切换及路径设置
- c++fabs函数_C语言中常用的标准库函数有哪些?
- Linq to sql介绍及增、删、改、查
- linux删除win分区工具,Win 10 和 Linux 双系统,从硬盘删除Linux分区,Win 10引导修复...
- 铁子们,2019博客之星投票活动开始了!帮我投个票呗
- 中国男性的私密数据大赏,女生勿入!
- 《Linux/UNIX OpenLDAP实战指南》——1.2 OpenLDAP目录架构
- VMD变分模态分解代码,C++代码下载
- 【瑞萨RA4系列】开发环境搭建和点灯指南
- 记一次网络风暴/网络环路
- C语言利用瑞丽分布产生高斯白噪声
- 怎样用计算机传输文件,两台电脑之间互相传文件的方法步骤
- 与chatGPT的第一次亲密接触
- 如何屏蔽百度右侧推荐和热搜