Copy
Case #1:
3
2
Case #2:
3
4
//AC代码:
#include<stdio.h>
#include<string.h>
int main(){
int t,n,m,count,num=0;
int str[1005][5];
int a[1005],b[1005],c[1005],d[1005];
int A[55],B[55],C[55],D[55];
int visit[1005];
scanf("%d",&t);
while(t--){
num++;
scanf("%d%d",&n,&m);
for(int i=0;i<n;i++){
scanf("%d.%d.%d.%d",&a[i],&b[i],&c[i],&d[i]);
}
for(int i=0;i<m;i++){
scanf("%d.%d.%d.%d",&A[i],&B[i],&C[i],&D[i]);
}
printf("Case #%d:\n",num);
for(int i=0;i<m;i++){
count=0;
memset(visit,0,sizeof(visit));
for(int j=0;j<n;j++){
int x,k=0;
str[j][1]=a[j]&A[i];
str[j][2]=b[j]&B[i];
str[j][3]=c[j]&C[i];
str[j][4]=d[j]&D[i];
//printf("***********%s\n",str[j]);
for(int s=0;s<j;s++){
if(str[s][1]==str[j][1]&&str[s][2]==str[j][2]&&str[s][3]==str[j][3]&&str[s][4]==str[j][4]&&!visit[s]){
count++;
visit[s]=1;
}
}
}
printf("%d\n",n-count);
}
}
return 0;
}
//错误代码:感觉与上面的一样,但是字符化处理的时候不知道哪里出错了,暂时还没发现欢迎指出。。。
#include<stdio.h>
#include<string.h>
int main(){
int t,n,m,count,num=0;
char str[1005][15];
int a[1005],b[1005],c[1005],d[1005];
int A[55],B[55],C[55],D[55];
int visit[1005];
scanf("%d",&t);
while(t--){
num++;
scanf("%d%d",&n,&m);
for(int i=0;i<n;i++){
scanf("%d.%d.%d.%d",&a[i],&b[i],&c[i],&d[i]);
}
for(int i=0;i<m;i++){
scanf("%d.%d.%d.%d",&A[i],&B[i],&C[i],&D[i]);
}
printf("Case #%d:\n",num);
for(int i=0;i<m;i++){
count=0;
memset(visit,0,sizeof(visit));
for(int j=0;j<n;j++){
int x,k=0;
x=a[j]&A[i];
str[j][k++]=x/100+'0';
str[j][k++]=x%100/10+'0';
str[j][k++]=x%10+'0';
x=b[j]&B[i];
str[j][k++]=x/100+'0';
str[j][k++]=x%100/10+'0';
str[j][k++]=x%10+'0';
x=c[j]&C[i];
str[j][k++]=x/100+'0';
str[j][k++]=x%100/10+'0';
str[j][k++]=x%10+'0';
x=d[j]&D[i];
str[j][k++]=x/100+'0';
str[j][k++]=x%100/10+'0';
str[j][k++]=x%10+'0';
//printf("***********%s\n",str[j]);
for(int s=0;s<j;s++){
if(strcmp(str[s],str[j])==0&&!visit[s]){
count++;
visit[s]=1;
}
}
}
printf("%d\n",n-count);
}
}
return 0;
}
//S=nx^2/[4tan(π/n)]