巨思维题

题目链接:

  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;
}

 

posted @ 2018-12-03 21:36  生活待我如初恋  阅读(161)  评论(0编辑  收藏  举报