比赛时打了好久这题。。结果补题的时候发现可以简单好多
#include <cstdio>
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
int a[8][25];
int judge(int k)
{
if(a[0][1+k]&&a[1][0+k]&&a[3][1+k]&&a[4][0+k]&&a[6][1+k]&&a[1][3+k]&&a[4][3+k])
return 8;
if(!a[0][1+k]&&!a[1][0+k]&&!a[3][1+k]&&!a[4][0+k]&&!a[6][1+k]&&a[1][3+k]&&a[4][3+k])
return 1;
if(a[0][1+k]&&!a[1][0+k]&&a[3][1+k]&&a[4][0+k]&&a[6][1+k]&&a[1][3+k]&&!a[4][3+k])
return 2;
if(a[0][1+k]&&!a[1][0+k]&&a[3][1+k]&&!a[4][0+k]&&a[6][1+k]&&a[1][3+k]&&a[4][3+k])
return 3;
if(!a[0][1+k]&&a[1][0+k]&&a[3][1+k]&&!a[4][0+k]&&!a[6][1+k]&&a[1][3+k]&&a[4][3+k])
return 4;
if(a[0][1+k]&&a[1][0+k]&&a[3][1+k]&&!a[4][0+k]&&a[6][1+k]&&!a[1][3+k]&&a[4][3+k])
return 5;
if(a[0][1+k]&&a[1][0+k]&&a[3][1+k]&&a[4][0+k]&&a[6][1+k]&&!a[1][3+k]&&a[4][3+k])
return 6;
if(a[0][1+k]&&!a[1][0+k]&&!a[3][1+k]&&!a[4][0+k]&&!a[6][1+k]&&a[1][3+k]&&a[4][3+k])
return 7;
if(a[0][1+k]&&a[1][0+k]&&a[3][1+k]&&!a[4][0+k]&&a[6][1+k]&&a[1][3+k]&&a[4][3+k])
return 9;
if(a[0][1+k]&&a[1][0+k]&&!a[3][1+k]&&a[4][0+k]&&a[6][1+k]&&a[1][3+k]&&a[4][3+k])
return 0;
}
int main()
{
int t;
scanf("%d%*c",&t);
char s[30];
while(t--)
{
memset(a,0,sizeof(a));
for(int i=0;i<7;i++)
{
scanf("%s",s);
for(int j=0;j<21;j++)
if(s[j]=='X')
a[i][j]=1;
}
int b,c,d,e;
b=judge(0);
c=judge(5);
d=judge(12);
e=judge(17);
printf("%d%d:%d%d\n",b,c,d,e);
}
return 0;
}