TopCoder-SRM631-DIV1-250pt-TaroJiroGrid-对解空间分析

http://community.topcoder.com/stat?c=problem_statement&pm=13393&rd=16062

这道题考察对解的可能的分析。一旦想到将n/2与n/2+1行操作为不同颜色就能得到满足条件的解这个结论,这道题目就非常简单了。

最差的情况2次操作可以完成,所以我们只需要枚举0次、1次操作能否完成即可。

int m,n;
class TaroJiroGrid
        { 
        public: 
            vector <string> g;
            bool Check(){
                for(int i=0;i<n;i++) {
                    char last=0;
                    int cur=0;
                    for(int j=0;j<n;j++){
                        if (g[j][i]==last) cur++;
                        else {last=g[j][i];cur=1;}
                        if (cur>n/2) {
                            return false;
                        }
                    }
                }
                return true;
            }
        int getNumber(vector <string> grid) 
            { 
                this->g=grid;
                n=g.size();
                if (Check()) {
                    return 0;
                }
                for(int i=0;i<n;i++){
                    g=grid;
                    for(int j=0;j<n;j++) {
                        g[i][j]='W';
                    }
                    if (Check()){return 1;}
                    for(int j=0;j<n;j++) {
                        g[i][j]='B';
                    }
                    if (Check()){return 1;}
                }
                return 2;
            } 
};

 

posted @ 2014-10-27 21:31  zombies  阅读(175)  评论(0编辑  收藏  举报