题意:
给你t组数据,n组7段显示器的代码,问你能不能通过标准码转换成这n组7段显示器的代码。
题解:
直接模拟就行了。
#include<stdio.h>
#include<string.h>
#include<math.h>
#include<algorithm>
using namespace std;
const int MAXN=1e5+7;
struct node
{
int id;
int c[7];
}a[17];
int d[10][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}};
char s[8];
bool mark[7];
int q[7],p[7];
int main()
{
int t,n;
scanf("%d",&t);
while(t--)
{
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
scanf("%d%s",&a[i].id,s);
for(int j=0;j<7;j++)
a[i].c[j]=s[j]-'0';
}
memset(mark,false,sizeof(mark));
for(int i=0;i<7;i++)
{
int cnt=0;
for(int j=1;j<=n;j++)
cnt+=pow(a[j].c[i]*2,a[j].id);
q[i]=cnt;
// printf("q[%d]=%d\n",i,q[i]);
}
for(int i=0;i<7;i++)
{
int cnt=0;
for(int j=1;j<=n;j++){
cnt+=pow(d[a[j].id][i]*2,a[j].id);
// printf("%d\n",a[j].id);
}
p[i]=cnt;
// printf("p[%d]=%d\n",i,p[i]);
}
int ans=0;
for(int i=0;i<7;i++)
{
for(int j=0;j<7;j++)
{
if(q[i]==p[j]&& !mark[j])
{
ans++;
mark[j]=true;
break;
}
}
}
if(ans==7)
printf("YES\n");
else
printf("NO\n");
}
}