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 |
位运算哦 15 ms#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> using namespace std; int a[4]; int b[4]; int c[4]; int right(int a,int p){ if(a>>(3-p)&1)return 1; else return 0; } void shangse(int arr[],int x,int y){ arr[x]=arr[x]|(1<<(3-y)); } void flip(int arr[],int x,int y){ arr[x]=arr[x]^(1<<(3-y)); if(x-1>=0)arr[x-1]^=1<<(3-y); if(y-1>=0)arr[x]^=1<<(3-y+1); if(x+1<=3)arr[x+1]^=1<<(3-y); if(y+1<=3)arr[x]^=1<<(3-y-1); } int i,j,b_bushu,c_bushu,minbushu=99999; char s[20]; int main(){ //freopen("input2.txt","r",stdin); for(i=0;i<4;i++){ scanf("%s",s); for(j=0;j<4;j++){ if(s[j]=='b')shangse(a,i,j); } } //ceshi //for(int k=0;k<4;k++){ // cout<<a[k]<<endl; //} //end for(i=0;i<16;i++){b_bushu=0; for(j=0;j<4;j++)b[j]=a[j]; /// sixteen manipulates for(j=0;j<4;j++){ if(right(i,j))/// the j position is 1 : flip {flip(b,0,j); b_bushu++; } }/// the o row is already for(int j=0;j<4;j++){ c[j]=b[j]; //cout<<" c[]"<<c[j]<<endl; }/// c is ready c_bushu=b_bushu; for(int m=1;m<4;m++){ for(int n=0;n<4;n++){ if(right(b[m-1],n)){flip(b,m,n);b_bushu++;} if(!right(c[m-1],n)){flip(c,m,n);c_bushu++;} } } if(b[0]==0&&b[0]==b[1]&&b[1]==b[2]&&b[2]==b[3])/// is the same { minbushu=min(minbushu,b_bushu); } if(c[0]==15&&c[0]==c[1]&&c[1]==c[2]&&c[2]==c[3])/// is the same { minbushu=min(minbushu,c_bushu); } } if(minbushu==99999){cout<<"Impossible\n";return 0;} cout<<minbushu<<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