CF1082B Vova and Trophies 题解
CF1082B Vova and Trophies 题解
瞎搞题,推荐的,一看是道水题,就随手A了……
题目描述
Vova has won \(n\)trophies in different competitions. Each trophy is either golden or silver. The trophies are arranged in a row.
The beauty of the arrangement is the length of the longest subsegment consisting of golden trophies. Vova wants to swap two trophies (not necessarily adjacent ones) to make the arrangement as beautiful as possible — that means, to maximize the length of the longest such subsegment.
Help Vova! Tell him the maximum possible beauty of the arrangement if he is allowed to do at most one swap.
输入格式
The first line contains one integer \(n( 2 \le n \le 10^5)\) — the number of trophies.
The second line contains \(n\) characters, each of them is either \(G\) or \(S\). If the $ i -th$ character is \(G\), then the \(i -th\) trophy is a golden one, otherwise it's a silver trophy.
输出格式
Print the maximum possible length of a subsegment of golden trophies, if Vova is allowed to do at most one swap.
题解
单调队列
我的想法是从左往右搞一个前缀和,记录一下当前有几个\(G\)
然后我们思考,能让一个\(G\)去替换\(S\)的条件是什么:
是至少有一个\(G\)没被我们选中,如图

想要让倒数第三个格子变成\(G\),就必须有一个其他格子是\(G\),比如\(1\)号格子
那么可以分类讨论一哈子
- 如果当前有至少一个\(G\)没被选中,我们就可以容忍在某一段序列里出现少于等于1个\(S\)

如图,绿色是我们已选中的序列,序列外有一\(G\),则可以替换
2.如果当前已选中所有的\(G\),那我们就不能从某个地方抽调一个\(G\)过来替换掉\(S\)

若为该情况则不可以,因为已经没有多余的\(G\)来替换了
那么这个东西的实现我们就可以用一下单调队列
并不需要真的搞个队列,模拟一下就行
首先先设一个指针\(now\)指向零,然后读入
读入的时候如果读入的是\(G\),那么存为\(1\),否则存为\(0\)
这样前缀和数组\(sum[i]\)就可以统计出在\(i\)位置前有多少个\(G\)
\(sum[i] - sum[now]\)就是当前队列里有多少个\(G\)
我们比较与\(sum[i] - sum[now]\)与当前队列里的奖牌数,就可以根据上面说的两种情况做出特判
大水题……
#include<bits/stdc++.h>
using namespace std;
#define rint register int
int n, a[100010], sum[100010], now, ans, tot;
int main( void ){
cin >> n;
char ch;
for( rint i = 1; i <= n; i++ ){
cin >> ch;
if( ch == 'G' ){
a[i] = 1; tot++;
} else a[i] = 0;
sum[i] = sum[i - 1] + a[i];
}
for( rint i = 1; i <= n; i++ ){
if( sum[i] - sum[now] != tot ){
while( sum[i] - sum[now] < i - now - 1 && now <= i ) now++; ans = max( ans, i - now );
}else{
while( sum[i] - sum[now] < i - now && now <= i ) now++; ans = max( ans, i - now );
}
}
cout << ans;
return 0;
}
CF1082B Vova and Trophies 题解的更多相关文章
- Codeforces 1082B Vova and Trophies(前缀+后缀)
题目链接:Vova and Trophies 题意:给定长度为n的字符串s,字符串中只有G和S,只允许最多一次操作:任意位置的两个字符互换.求连续G的最长长度. 题解:维护pre和pr,nxt和nx. ...
- Educational Codeforces Round 55:B. Vova and Trophies
B. Vova and Trophies 题目链接:https://codeforc.es/contest/1082/problem/B 题意: 给出一个“GS”串,有一次交换两个字母的机会,问最大的 ...
- Codeforces 1082B Vova and Trophies 模拟,水题,坑 B
Codeforces 1082B Vova and Trophies https://vjudge.net/problem/CodeForces-1082B 题目: Vova has won nn t ...
- 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 ...
- Educational Codeforces Round 55 (Rated for Div. 2) B. Vova and Trophies (贪心+字符串)
B. Vova and Trophies time limit per test2 seconds memory limit per test256 megabytes inputstandard i ...
- Educational Codeforces Round 55 (Rated for Div. 2) B. Vova and Trophies
传送门 https://www.cnblogs.com/violet-acmer/p/10035971.html 题意: Vova有n个奖杯,这n个奖杯全部是金奖或银奖,Vova将所有奖杯排成一排,你 ...
- Vova and Trophies CodeForces - 1082B(思维题)
Vova has won nn trophies in different competitions. Each trophy is either golden or silver. The trop ...
- B. Vova and Trophies 字符串预处理+思维+贪心
题意:给出一个字符串 只有G和S 可以交换任意两个位置的字符一次 问 最长的G的长度是多少 思路:预处理字符串 把相同的G粘成一个G 记一下数量 字符串变为 GSSGSGGSGSSG 相邻有一个S ...
- B. Vova and Trophies
链接 [https://codeforces.com/contest/1082/problem/B] 题意 给你一个包含GS的字符串,只允许交换一次任意不同位置的字符,问最长的连续G串是多少 分析 很 ...
随机推荐
- CSA|EI
信息检索 CSA是学科特色的包含相关学科的内容,其网址是https://search.proquest.com/ 可以使用命令行检索: 分类的限制检索: 寻找检索线索可使用百科全书 EI是工程领域最全 ...
- Docker的网络类型
四种网络类型: None:不为容器配置任何网络功能,--net=noneContainer:与另一个运行中的容器共享Network Namespace,--net=container:containe ...
- ACID原则
ACID原则是数据库事务正常执行的四个,分别指原子性.一致性.独立性及持久性. 事务的原子性(Atomicity)是指一个事务要么全部执行,要么不执行.也就是说一个事务不可能只执行了一半就停止了.比如 ...
- unittest(12)- 学习读取配置文件
1.配置文件格式 2.读取配置文件 import configparser """ 通过读取配置文件,来执行相应的测试用例 配置文件分为2个部分 第一部分:[SECTIO ...
- Shell的特殊字符
# 有意义的“#”符合 echo ${PATH#*:} # 参数替换,不是一个注释 echo $(( 2#101011 )) # 进制转换,可以是任意进制,不是一个注释 “.” .字符匹配,这是作为正 ...
- 2018年宜賓美酒文化節浮空投影舞美特效 / 2018 Yibing Wine Festival Visual Effect Projection
客户 Client:五粮液集团 硬件 Hardware:PC,巴可投影机30,000流明*2 Barco projector 30,000 lumen*2 软件 Software:Resolume, ...
- python设置检查点简单实现
说检查点,其实就是对过去历史的记录,可以认为是log.不过这里进行了简化.举例来说,我现在又一段文本.文本里放有一堆堆的链接地址.我现在的任务是下载那些地址中的内容.另外因为网络的问题或者网站的问题, ...
- 7/8段码管(LED)
LED显示器在许多的数字系统中作为显示输出设备,使用非常广泛.它的结构是由发光二极管构成的a.b.c.d.e.f和g七段,并由此得名,实际上每个LED还有一个发光段dp,一般用于表示小数点,所以也有少 ...
- 人心和隐私怎么防?“防出轨”APP让道德滑落
王尔德曾说过,"一个人应该永远保持一点神秘感".让·保·里克特也表示,:"一个人泄露了秘密,哪怕一丝一毫,就再也得不到安宁了".可见,对于自然人来说,保有自 ...
- Nginx之负载节点状态监测
前言 nginx做负载均衡性能很好,但是负载中的节点有异常怎么处理呢? 当然是nginx发现某一个节点为异常节点后自动将请求转移至其他节点直至转移到一个正常节点. 为了实现这一步有如下两个解决方案可供 ...