| ||||||||||
| 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:liuweibiao at 2012-02-19 14:35:48 #include<iostream>
#include<cstring>
using namespace std;
int matrix[4][4];
string str[16]={"0000","0001","0010","0011","0100","0101","0110","0111","1000","1001","1010","1011","1100","1101","1110","1111"};
int Flip(string str,int color){
int total(0);
int a[4][4];
bool flag(true);
for(int i=0;i<4;i++){
for(int j=0;j<4;j++){
a[i][j] = matrix[i][j];
}
}
for(int i=0;i<4;i++){
int tmp = str[i]-'0';
if(tmp==1){
total++;
a[0][i] = 1-tmp;
if(i==0){
a[0][1] = 1 - a[0][1];
a[1][0] = 1 - a[1][0];
}else if(i==3){
a[0][2] = 1 - a[0][2];
a[1][3] = 1 - a[1][3];
}else{
a[0][i-1] = 1 - a[0][i-1];
a[0][i+1] = 1 - a[0][i+1];
a[1][i] = 1 - a[1][i];
}
}
}
for(int i=1;i<3;i++){
for(int j=0;j<4;j++){
if(a[i-1][j]==color){
total++;
a[i][j] = 1 - a[i][j];
a[i+1][j] = 1 - a[i+1][j];
a[i-1][j] = 1 - a[i-1][j];
if(j>0)
a[i][j-1] = 1 - a[i][j-1];
if(j<3)
a[i][j+1] = 1 - a[i][j+1];
}
}
}
for(int i=0;i<4;i++){
if(i==0){
if(a[2][0]==color){
total++;
a[3][0] = 1 - a[3][0];
a[3][1] = 1 - a[3][1];
}
}
if(i==2||i==1){
if(a[3][i-1]!=a[2][i]){
flag = false;
total = 0;
break;
}else{
if(a[3][i-1]==color){
total++;
a[3][i] = 1 - a[3][i];
a[3][i-1] = 1 - a[3][i-1];
a[3][i+1] = 1 - a[3][i+1];
a[2][i] = 1 - a[2][i];
}
}
}
if(i==3){
if(a[3][2]!=a[3][3]||a[3][2]!=a[2][3]||a[2][3]!=a[3][3]){
flag = false;
total=0;
break;
}else{
if(a[3][2]==color){
total++;
}
}
}
}
if(!flag){
total==0;
}
return total;
}
int main(){
int test(0);
for(int i=0;i<4;i++){
string st;
cin>>st;
for(int j=0;j<4;j++){
if(st[j]=='b'){
matrix[i][j]=1;
test++;
}else{
matrix[i][j]=0;
}
}
}
if(test==0||test==16){
cout<<0<<endl;
return 0;
}
int min_num(16);
string tmp;
for(int i=0;i<16;i++){
tmp = str[i];
int num1 = Flip(tmp,0);
int num2 = Flip(tmp,1);
if(num1!=0){
if(num1<min_num){
min_num = num1;
}
}
if(num2!=0){
if(num2<min_num){
min_num = num2;
}
}
}
if(min_num==0||min_num==16)
cout<<"Impossible"<<endl;
else
cout<<min_num<<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