B. Blocks

題意:每次翻轉相鄰的方格,問你翻轉多少次使得顏色相同,求最少操作數

雖然代碼亂點,但思想還是蠻簡單的,就是一個暴力反轉問題

    
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;
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章