CodeForces 1082B Vova and Trophies(模擬)
阿新 • • 發佈:2018-12-04
題目大意就是讓一個'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; }