题目描述
FEB
样例
输入样例1:
4
BEEF
输出样例1:
2
1
2
输入样例2:
9
FEBFEBFEB
输出样例2:
2
2
3
输入样例3:
10
BFFFFFEBFE
输出样例3:
3
2
4
6
C++ 代码
#include <bits/stdc++.h>
using namespace std;
const int N=2e5+10;
int n,a[N],num=0,minnum,maxnum;
bool vis1=false,vis2=false;
queue<pair<int,int>> q;
int main()
{
int sum=0;
cin>>n;
string s;
cin>>s;
for(int i=0;i<n;i++)
{
if(s[i]!='F'&&s[i]==s[i-1]) num++;
if(s[i]=='F')
{
int tt=i;
int cnt=1;
while(s[++i]=='F')//这里有++,所以下一段代码用到i==n **
{
cnt++;
}
if(tt==0||i==n)
{
if(tt==0&&i==n) q.push({cnt-1,1});
else q.push({cnt,1});
}
else
{
if(s[tt-1]==s[i])
{
q.push({cnt,2});
}
else
{
q.push({cnt,3});
}
}
}
}
while(q.size())
{
int ord=q.front().second,kin=q.front().first;
if(kin>1) vis2=1;
q.pop();
if(ord==1)
{
vis1=true;
maxnum += kin ;
}
else if(ord==2)
{
vis2=true;
maxnum += (kin+1);
if(kin%2==0)
{
minnum += 1;
}
}
else
{
maxnum += kin;
if(kin%2!=0)
{
minnum += 1;
}
}
}
if(vis1==1&&vis2==0) for(int i=minnum;i<=maxnum;i ++ ) sum++;
else if(vis1==0&&vis2==1) for(int i=minnum;i<=maxnum;i += 2) sum++;
else if(vis1==0&&vis2==0) sum=1;
else for(int i=minnum;i<=maxnum;i ++ ) sum++;
cout<<sum<<endl;
minnum += num ;
maxnum += num ;
if(vis1==1&&vis2==0) for(int i=minnum;i<=maxnum;i ++ ) cout<<i<<endl;
else if(vis1==0&&vis2==1) for(int i=minnum;i<=maxnum;i += 2) cout<<i<<endl;
else if(vis1==0&&vis2==0) cout<<minnum<<endl;
else for(int i=minnum;i<=maxnum;i ++ ) cout<<i<<endl;
}