Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
Re:仅对第一行进行枚举In Reply To:仅对第一行进行枚举 Posted by:silko at 2009-12-01 13:14:26 > 只需对第一行进行枚举,第i行如何改变取决于第i-1行的值。只需枚举16次便可完成 确实是这样的,大概枚举16次就OK了。轻松AC。 #include <iostream> #include <string> using namespace std; void setflip(string &s,int col) { switch(col) { case 1: s[1]='b'+'b'-s[1];s[2]='b'+'b'-s[2];s[5]='b'+'b'-s[5]; break; case 2: s[1]='b'+'b'-s[1];s[2]='b'+'b'-s[2];s[3]='b'+'b'-s[3];s[6]='b'+'b'-s[6]; break; case 3: s[2]='b'+'b'-s[2];s[3]='b'+'b'-s[3];s[4]='b'+'b'-s[4];s[7]='b'+'b'-s[7]; break; case 4: s[3]='b'+'b'-s[3];s[4]='b'+'b'-s[4];s[8]='b'+'b'-s[8]; break; case 5: s[1]='b'+'b'-s[1];s[5]='b'+'b'-s[5];s[6]='b'+'b'-s[6];s[9]='b'+'b'-s[9]; break; case 6: s[2]='b'+'b'-s[2];s[5]='b'+'b'-s[5];s[6]='b'+'b'-s[6];s[7]='b'+'b'-s[7];s[10]='b'+'b'-s[10]; break; case 7: s[3]='b'+'b'-s[3];s[6]='b'+'b'-s[6];s[7]='b'+'b'-s[7];s[8]='b'+'b'-s[8];s[11]='b'+'b'-s[11]; break; case 8: s[4]='b'+'b'-s[4];s[7]='b'+'b'-s[7];s[8]='b'+'b'-s[8];s[12]='b'+'b'-s[12]; break; case 9: s[5]='b'+'b'-s[5];s[9]='b'+'b'-s[9];s[10]='b'+'b'-s[10];s[13]='b'+'b'-s[13]; break; case 10: s[6]='b'+'b'-s[6];s[9]='b'+'b'-s[9];s[10]='b'+'b'-s[10];s[11]='b'+'b'-s[11];s[14]='b'+'b'-s[14]; break; case 11: s[7]='b'+'b'-s[7];s[10]='b'+'b'-s[10];s[11]='b'+'b'-s[11];s[12]='b'+'b'-s[12];s[15]='b'+'b'-s[15]; break; case 12: s[8]='b'+'b'-s[8];s[11]='b'+'b'-s[11];s[12]='b'+'b'-s[12];s[16]='b'+'b'-s[16]; break; case 13: s[9]='b'+'b'-s[9];s[13]='b'+'b'-s[13];s[14]='b'+'b'-s[14]; break; case 14: s[10]='b'+'b'-s[10];s[13]='b'+'b'-s[13];s[14]='b'+'b'-s[14];s[15]='b'+'b'-s[15]; break; case 15: s[11]='b'+'b'-s[11];s[14]='b'+'b'-s[14];s[15]='b'+'b'-s[15];s[16]='b'+'b'-s[16]; break; case 16: s[12]='b'+'b'-s[12];s[15]='b'+'b'-s[15];s[16]='b'+'b'-s[16]; break; default: break; } } int main() { int i,j,counter,counter_first,min_counter=17; int one,two,three,four,num; bool flag; string source,str,str_copy; source="b"; cin>>str; source+=str; cin>>str; source+=str; cin>>str; source+=str; cin>>str; source+=str; for(i=1;i<=16;i++) { if(source[i] == 'b') source[i]= 'a'; else source[i]= 'c'; } for(i=0;i<=15;i++) { num=i;counter=0;counter_first=0; four=num%2;num/=2; three=num%2;num/=2; two=num%2;num/=2; one=num%2; str=source; if(one) { setflip(str,1); counter_first++; } if(two) { setflip(str,2); counter_first++; } if(three) { setflip(str,3); counter_first++; } if(four) { setflip(str,4); counter_first++; } str_copy=str; counter=counter_first; for(j=1;j<=12;j++) if(str[j]!= 'a') { setflip(str,j+4); counter++; } flag=true; for(j=13;j<=16;j++) if(str[j] != 'a') flag=false; if(flag) if(counter < min_counter) min_counter=counter; counter=counter_first; for(j=1;j<=12;j++) if(str_copy[j] != 'c') { setflip(str_copy,j+4); counter++; } flag=true; for(j=13;j<=16;j++) if(str_copy[j] != 'c') flag=false; if(flag) if(counter < min_counter) min_counter=counter; } if(min_counter < 17) cout<<min_counter<<endl; else cout<<"Impossible"<<endl; return 0; } Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator