1. 程式人生 > >CodeForces 1082B Vova and Trophies(模擬)

CodeForces 1082B Vova and Trophies(模擬)

傳送門

題目大意就是讓一個'S'和'G'更換一下位置,然後更換後的字串裡連續'G'串的最大長度。

用一個Gnt1記錄第一段一共有多少個'G‘,Gnt2記錄第二段有幾個'G',立一個flag來記錄序列是否終止,即遇到'S'更新flag的值,同時也更新前邊隔段的數值為零。用ans記錄當前為止相鄰兩段最長的'G'序列,這裡我們假設'S'可以和這兩段外的另外的'G'進行更換,等到最後和總的'G'的個數Gnt比,若比Gnt大則說明我們假設錯誤,把ans更新為Gnt即可,否則則說明假設正確,直接輸出即可。附程式碼如下:

#include<iostream>
#include<cstdio>
using namespace std;
int main()
{
    int n;
    char ch[100100];
    scanf("%d",&n);
    getchar();
    scanf("%s",ch);
    int Gnt = 0,Gnt1 = 0,Gnt2 = 0,flag = 0,ans = 0;
    for(int i = 0;i < n; i++)
    {
        if(ch[i] == 'G')
        {
            Gnt++;
            if(!flag)
                Gnt1++;
            if(flag)
                Gnt2++;
        }
        else
        {
            flag = !flag;
            if(!flag)
                Gnt1 = 0;
            else
                Gnt2 = 0;
        }
        ans = max(ans,Gnt1 + Gnt2 + 1);
    }
    if(ans > Gnt)
        ans = Gnt;
    printf("%d",ans);
    return 0;
}