看到了一堆1010就觉得会用到二进制思想。。。切得很顺。
#include <bits/stdc++.h>
using namespace std;
struct node {
int num;
char s[10];
}p[10];
int a[10],b[10];
int ppow[]={1,2,4,8,16,32,64,128,256,512,1024};
int q[9][7]={{1,0,0,1,1,1,1},
{0,0,1,0,0,1,0},
{0,0,0,0,1,1,0},
{1,0,0,1,1,0,0},
{0,1,0,0,1,0,0},
{0,1,0,0,0,0,0},
{0,0,0,1,1,1,1},
{0,0,0,0,0,0,0},
{0,0,0,0,1,0,0}};
int main()
{
int t,n;
scanf("%d", &t);
while (t--) {
scanf("%d", &n);
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
for (int i=0;i<n;i++) scanf("%d%s",&p[i].num,p[i].s);
for (int i=0;i<7;i++)
for (int j=0;j<n;j++) {
a[i]+=(p[j].s[i]-'0')*ppow[j];
b[i]+=q[p[j].num-1][i]*ppow[j];
}
sort(a,a+7);sort(b,b+7);
int flag=1;
for (int i=0;i<7;i++)
if (a[i]!=b[i]) {
flag=0;break;
}
if (flag) printf("YES\n");
else printf("NO\n");
}
return 0;
}