2697 宝石串(前缀和)

来源:互联网 发布:c 图形编程 编辑:程序博客网 时间:2024/05/03 21:07

是一个前缀和的题目,先求出绿宝石(红的也行)的前缀和,再for循环一遍即可。

#include<iostream>

#include<cstdio>
#include<cmath>
#include<cstring>
#include<string>
using namespace std;
int dis[1000001],maxx;
string a;
int main()
{
cin>>a;
int l=a.size()-1;//宝石串长度。
for(int i=0;i<=l;++i)
{
if(a[i]=='G')
dis[i]=dis[i-1]+1;
else dis[i]=dis[i-1];
}//求前缀和。
for(int i=0;i<=l;++i)
{
for(int j=i;j>=0;--j)
{
if(a[j]=='G')//注意,如果是G就要再加上1。
{
if((dis[i]-dis[j]+1)*2==(i-j+1))
   {
   maxx=max(maxx,i-j+1);//取最大。
   }
}
else 
{
if((dis[i]-dis[j])*2==(i-j+1))
   {
   maxx=max(maxx,i-j+1);
   }
}
}
}
cout<<maxx;
return 0;
}