费解的开关
1 #include<bits/stdc++.h> 2 using namespace std; 3 const int INF=0x3f3f3f3f; 4 int f[6][6],a[6][6],n; 5 int dx[]={0,-1,0,0,1}; 6 int dy[]={0,0,-1,1,0}; 7 inline void go(int x,int y) 8 { 9 for(int i=0;i<=4;i++) 10 { 11 int xx=x+dx[i]; 12 int yy=y+dy[i]; 13 if(xx<0||xx>4||yy<0||yy>4) continue; 14 a[xx][yy]^=1; 15 } 16 } 17 int main() 18 { 19 scanf("%d",&n); 20 while(n--) 21 { 22 for(int i=0;i<5;i++) 23 for(int j=0;j<5;j++) 24 scanf("%1d",&f[i][j]); 25 int ans=INF; 26 for(int i=0;i<32;i++) 27 { 28 int cnt=0;bool flag=0; 29 memcpy(a,f,sizeof(f)); 30 for(int j=0;j<5;j++) if((i>>j)&1) cnt++,go(0,j);//枚举第一行点击方法 31 for(int j=0;j<4;j++) 32 for(int k=0;k<5;k++) 33 if(!a[j][k]) cnt++,go(j+1,k); 34 for(int j=0;j<5;j++) 35 for(int k=0;k<5;k++) 36 if(!a[j][k]) {flag=1;break;} 37 if(!flag) ans=min(ans,cnt); 38 } 39 if(ans==INF||ans>6) printf("%d\n",-1); 40 else printf("%d\n",ans); 41 } 42 return 0; 43 }