B. Blocks

    技术2022-07-10  167

    题意:每次翻转相邻的方格,问你翻转多少次使得颜色相同,求最少操作数

    虽然代码乱点,但思想还是蛮简单的,就是一个暴力反转问题

    int main() { IOS; while(cin>>n){ vector<int> w,b; //存储全为 白/黑 的答案 string s; cin>>s; string tmp=s; bool fb=0,fw=0; //判断全为 白/黑 可行 for(i=0;i<n-1;i++){ //全为黑色 if(tmp[i]=='B') continue; tmp[i+1]=(tmp[i+1]=='B')? 'W' : 'B' ; b.push_back(i+1); } if(tmp[n-1]=='B') fb=1; tmp=s; for(i=0;i<n-1;i++){ if(tmp[i]=='W') continue; tmp[i+1]=(tmp[i+1]=='B')? 'W' : 'B' ; w.push_back(i+1); } if(tmp[n-1]=='W') fw=1; if(fb==0 && fw==0){ cout<<-1<<endl; return 0; } if(fb==0 && fw==1){ cout<<w.size()<<endl; for( auto it:w ) cout<<it<<" "; cout<<endl; return 0; } else if(fb==1 && fw==0){ cout<<b.size()<<endl; for( auto it:b ) cout<<it<<" "; cout<<endl; return 0; } //vector<int>::iterator it; if( b.size()>w.size() ){ cout<<w.size()<<endl; for( auto it:w ) cout<<it<<" "; } else{ cout<<b.size()<<endl; for( auto it:b ) cout<<it<<" "; } cout<<endl; } //PAUSE; return 0; }

     

    Processed: 0.017, SQL: 9