题目链接: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(前缀+后缀)相关推荐

  1. CodeForces - 1082B Vova and Trophies

    传送 题意:一个只包含G和S的字符串,一次交换能使连续的G最长为多少. 思路:想要使只包含G的子串最长,显然贪心地将两个子串中间的S与一个不在子串的G交换再与最大值比较就可以了,要注意除了这两个子串外 ...

  2. CF 1082B Vova and Trophies

    题目:Vova and Trophies 思路: 如果有两块G中间只隔一个S,就把它和一个G交换. 否则就移一个S到最长的那一块旁边. 代码: #include<bits/stdc++.h> ...

  3. 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 ...

  4. 【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 ...

  5. java中获得词根的方法_分析在各大考纲词汇中同时拥有前缀后缀和词根的词(一)...

    CET4.CET6.GRE.IELTS.TOEFL.考研英语总的词汇量为14055,有11544个单词含有词根信息,有5526个单词含有前缀信息,有9525个单词含有后缀信息.那么有多少个单词同时拥有 ...

  6. Rvit中添加尺寸标注的前缀后缀和【一键尺寸定位标注】

    一.Rvit中如何添加尺寸标注的前缀后缀 在进行尺寸标注尤其是多段连续的尺寸标注时常会用到诸如:3x2000=6000的标注样式,在Revt中应如何实现? 我们可以采用以下方法来解决: 1.如图1所示 ...

  7. 字符串最长公共前缀后缀长度

    首先,要了解两个概念:"前缀"和"后缀". "前缀"指除了最后一个字符以外,一个字符串的全部头部组合:"后缀"指除了第一 ...

  8. 我的世界服务器世界前缀修改,大佬教你如何给玩家添加名字前缀后缀

    下面小编为大家带来我的世界添加名字前缀后缀攻略,相信好多玩家都非常的想知道,那么想知道的玩家一定要看下面的内容! 作者:Msure 很多玩家见过有些地图中有玩家名字可以获得前缀,如图: 那么下面给出详 ...

  9. 【MySQL】利用Concat()函数在某一列字段批量添加前缀后缀

    一.MySQL中的Concat()函数 1. 含义: 将多个字符串连接成一个字符串. 2. 语法: concat(str1, str2,-) 返回结果为连接参数产生的字符串,如果有任何一个参数为nul ...

  10. jQuery EasyUI/TopJUI基本的数字输入框(保留两位小数,带前缀后缀...)

    jQuery EasyUI/TopJUI基本的数字输入框(保留两位小数,带前缀后缀...) numberbox(数值输入框) HTML required:必填字段,默认为false:prompt:显示 ...

最新文章

  1. 常用的富文本框插件FreeTextBox、CuteEditor、CKEditor、FCKEditor、TinyMCE、KindEditor ;和CKEditor实例...
  2. Cesium源码编译过程
  3. android查看存储占用,Android获取App内存使用情况的方法
  4. 2019全球AI人才报告发布:AI专家仅3.6万
  5. 老web换新枝----Sails.js移动设备的全新生产力(五)
  6. android录音播放列表,android数据库里的视频,图片,音频表
  7. Oracle归档日志与非归档日志的切换及路径设置
  8. c++fabs函数_C语言中常用的标准库函数有哪些?
  9. Linq to sql介绍及增、删、改、查
  10. linux删除win分区工具,Win 10 和 Linux 双系统,从硬盘删除Linux分区,Win 10引导修复...
  11. 铁子们,2019博客之星投票活动开始了!帮我投个票呗
  12. 中国男性的私密数据大赏,女生勿入!
  13. 《Linux/UNIX OpenLDAP实战指南》——1.2 OpenLDAP目录架构
  14. VMD变分模态分解代码,C++代码下载
  15. 【瑞萨RA4系列】开发环境搭建和点灯指南
  16. 记一次网络风暴/网络环路
  17. C语言利用瑞丽分布产生高斯白噪声
  18. 怎样用计算机传输文件,两台电脑之间互相传文件的方法步骤
  19. 与chatGPT的第一次亲密接触
  20. 如何屏蔽百度右侧推荐和热搜

热门文章

  1. 面试题之TCP三次握手和四次挥手详解
  2. linux版wps无法输入中文的解决办法
  3. 面试题 -二元查找树转变成排序的双向链表
  4. zebra探秘(一)
  5. Samba服务器配置(2)--认识smb.conf配置文件
  6. matlab实现布尔真值表的排列,MATLAB在数字电路仿真中的应用
  7. python 翻译代码_python写的翻译代码
  8. [2018.09.08 T1] 炉石
  9. http抓包实践--(五)-常用的操作
  10. bootstrap学习笔记-(1-初识bootstrap)