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