巨思维题
题目链接:
https://codeforces.com/contest/1082/problem/B
题目意思:
给定字符串长度,再输入该长度的字符串(只包含G和S),求交换一次两个字符位置后得到的G的最大连续长度。
题目思路:
统计连续的G数目,用cntg记录
记录下G的总数目,用sumg记录
记录下与该S紧紧相连的G数目,用cnts_g记录
ans存答案。
AC代码如下:
#include<iostream> #include<cstdio> #include<cstring> #include<string> #include<cstdlib> #include<cmath> #include<algorithm> #include<vector> #include<queue> #include<stack> #include<set> #define Max(a,b) ((a)>(b)?(a):(b)) #define Min(a,b) ((a)<(b)?(a):(b)) #define Swap(a,b,t) t=a,a=b,b=t #define Mem0(x) memset(x,0,sizeof(x)) #define Mem1(x) memset(x,-1,sizeof(x)) #define MemX(x) memset(x,0x3f,sizeof(x)) using namespace std; typedef long long ll; const int inf=0x3f3f3f; const double eps=1e-12; int main() { int t; char x; cin>>t; ll cntg=0,sumg=0,cnts_g=0,ans=0; while (t--){ cin>>x; if (x=='G'){ cntg++;sumg++; } else { cnts_g=cntg; cntg=0; } ans=max(ans,cntg+cnts_g+1); } ans=min(ans,sumg); printf("%lld\n",ans); return 0; }