可以说自己来连arr那个地方都不会用。。
思路:
相当于做列变换但是能够与原来的式子匹配。。
那么不管怎样,给原来的图形+p,,给现在的图形+p,排序后都要是相等的,否则就不可以了
#include<bits/stdc++.h>
#define ll long long
#define sf scanf
#define mem(a,b) memset(a,b,sizeof(a));
using namespace std;
char mmp[15][15]={
{"1111111"},
{"1001111"},
{"0010010"},
{"0000110"},
{"1001100"},
{"0100100"},
{"0100000"},
{"0001111"},
{"0000000"},
{"0000100"},
};
int arr[20];
int Mask[20];
int msk[20];
char tmp[20][20];
int main(){
int t;
int n;
scanf("%d",&t);
while(t--){
sf("%d",&n);
for(int i=1;i<=n;++i){
sf("%d",&arr[i]);
sf("%s",tmp[arr[i]]);//自己真的可能不会用这个
}
mem(Mask,0);mem(msk,0);
for(int i=1,p=1;i<=n;++i,p<<=1){
for(int k=0;k<7;++k){
if(mmp[arr[i]][k]=='0')
Mask[k]+=p;
if(tmp[arr[i]][k]=='0')
msk[k]+=p;
}
}
sort(msk,msk+7);
sort(Mask,Mask+7);
int fg=1;
for(int i=0;i<7;++i){
if(Mask[i]!=msk[i]){
fg=0;break;
}
}
printf(fg?"YES\n":"NO\n");
}
}