很简单的模拟题,但是noip的奶酪20分后我觉得模拟题也是需要认真考量的。
写这题的时候,我的目标是一次A过,想了一些些特殊情况,真的找出了bug。
一个字符串(3<=长度<=350),选择两个字符中间的位置作为起点,向左右分别计数相同字符的个数,左右累加为答案。求最大答案。
共3种字符,其中'w'可表示任意字符。
本题,一定有解,且最小解为2.
#include<iostream>
using namespace std;
char x[400];
int n,ans;
void fix(int &x)
{
if(x==-1)
x=n-1;
else if(x==n)
x=0;
}
void sch(int l)
{
int r=l+1;fix(r);
char lc=x[l],rc=x[r];
int cnt=0;
while(lc=='w' or x[l]==lc or x[l]=='w')
{
if(cnt==n)
break;
cnt++,
lc=(lc=='w'?x[l]:lc),
l--,fix(l);
}
while(rc=='w' or x[r]==rc or x[r]=='w')
{
if(cnt==n)
break;
cnt++,
rc=(rc=='w'?x[r]:rc),
r++,fix(r);
}
ans=max(ans,cnt);
}
int main()
{
ios::sync_with_stdio(0);
cin>>n;
for(int i=0;i<n;i++)
cin>>x[i];
for(int i=0;i<n;i++)
sch(i);
cout<<ans;
return 0;
}
特殊情况
字符串全是'w'。答案为n,需要特判退出。
交第一次就过啦,加上之前写的,uasco1已经写完。