题目
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=6;
char g[N][N],back[N][N]; int dx[5]={
0,1,0,-1,0},dy[5]={
1,0,-1,0,0}; void turn(int x,int y)
{
for(int i=0;i<5;i++)
{
int tx=x+dx[i],ty=y+dy[i];
if(tx<0||ty<0||tx>=5||ty>=5) continue;
g[tx][ty]^=1;
}
}
int main()
{
int t;
cin>>t; while(t--)
{
int res=10;
for(int i=0;i<5;i++)
cin>>g[i];
for(int op=0;op<32;op++)
{
int step=0;
memcpy(back,g,sizeof(g));
for(int i=0;i<5;i++) if(op>>i&1) {
step++; turn(0,i);}
for(int i=0;i<4;i++)
for(int j=0;j<5;j++) if(g[i][j]=='0')
{
step++; turn(i+1,j);
}
int flag=0;
for(int i=0;i<5;i++) if(g[4][i]=='0') {
flag=1;break;}
if(!flag) res=min(res,step);
memcpy(g,back,sizeof(back));
}
if(res>6) cout<<-1<<endl;
else cout<<res<<endl;
}
return 0;
}