1271B. Blocks
BW序列
操作:选择相邻的反转。让序列变为单色,可就输出操作左边序号,不可-1.不要求操作数最小。
直接暴力两趟分别为B或W开头,判断最后是否可行:
int t,n;
string s;
int a[maxn],b[maxn];
int main(){
n=ird();
cin>>s;
queue<int> q,qq;
for(int i=0;i<n;i++){
if(s[i]=='B')
a[i]=1;
else a[i]=0;
b[i]=a[i];
}
for(int i=0;i<n-1;i++){
if(a[i]!=1){
a[i]=0;
q.push(i+1);
a[i+1]++;
a[i+1]%=2;
}
if(b[i]!=0){
b[i]=0;
qq.push(i+1);
b[i+1]++;
b[i+1]%=2;
}
}
if(a[n-1]==1){
cout<<q.size()<<endl;
while(!q.empty()){
cout<<q.front()<<" ";
q.pop();
}
cout<<endl;
}
else if(b[n-1]==0){
cout<<qq.size()<<endl;
while(!qq.empty()){
cout<<qq.front()<<" ";
qq.pop();
}
cout<<endl;
}
else
cout<<-1<<endl;
return 0;
}
如果要最小呢?
瞎猜1:如果存在奇数个B或W而n为偶数,不可行,-1。gun
瞎猜2:两个比一下取最小值呗(假