Codeforces Round #754 (Div. 2) C
Posted yeah17981
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Codeforces Round #754 (Div. 2) C相关的知识,希望对你有一定的参考价值。
某个b这场的c题死都找不到bug,不然就绿了呜呜呜,对我到现在都没绿我可菜了
结果发现是中间变量忘了清零了草
给一串只有abc的字符串,求最短子串满足其中的a的数量大于b的数量
首先子串开头结尾都为a,中间bc、cb、c、b、bbacc、ccabb、空
结束
#include <bits/stdc++.h>
using namespace std;
char s[1000006];
int a1[1000006];
int b1[1000006];
int c1[1000006];
int main()
{
int n,a,b,c;
cin>>n;
int l=1,r=a;
int ans=0;
while(n--)
{
cin>>a;
cin>>s+1;
l=0;
b=0;c=0;
int flag=0;
int minn=3,maxx=3;
for(int i=1;i<=a;i++)
{
if(s[i]=='a')
{
if(l!=0)
{
a1[i]=i-l;
b1[i]=b;
c1[i]=c;
}
b=0;
c=0;
l=i;
if(a1[i]==1)
{
flag=1;
break;
}
}
if(s[i]=='b')
{
b++;
}
if(s[i]=='c')
{
c++;
}
}
int k=-1;
b=-1;
c=-1;
ans=-1;
for(int i=1;i<=a;i++)
{
if(a1[i]!=0)
{
if(a1[i]<=3)
{
if(k==3&&a1[i]==3&&b+b1[i]==2&&c+c1[i]==2)
{
if(ans==-1)
{
ans=7;
}
}
k=a1[i];
b=b1[i];
c=c1[i];
if(b<=1&&c<=1)
{
if(ans==-1) ans=b+c+2;
ans=min(ans,b+c+2);
}
}
else
{
k=0;
b=0;
c=0;
}
a1[i]=0;
b1[i]=0;
c1[i]=0;
}
}
if(flag==1)
{
cout<<2<<"\\n";
continue;
}
cout<<ans<<"\\n";
}
}
// 10000000
//9
//aabbabaca
//7
//abbabba
以上是关于Codeforces Round #754 (Div. 2) C的主要内容,如果未能解决你的问题,请参考以下文章
Codeforces Round #754 (Div. 2) C
Codeforces Round #436 E. Fire(背包dp+输出路径)
[ACM]Codeforces Round #534 (Div. 2)