题目链接:点击打开链接
Time Limit: 2000/1000 MS (Java/Others)
Memory Limit: 65536/65536 K (Java/Others)
模拟题。实现代码如下:
#include <cstdio>
#include <iostream>
#include <cstring>
#include <map>
using namespace std;
int main()
{
int n,m,t,T=1;
int ip[1010][4],add[1010][4];
int web[55][4];
char sip[20],sweb[20];
scanf("%d",&t);
while(t--)
{
scanf("%d%d",&n,&m);
for(int i=0;i<n;i++)
{
scanf("%s",sip);
int len=strlen(sip);
int cnt=0;
for(int j=0;j<len;j++)
{
int tmp=0;
while(sip[j]!='.'&&j<len)
tmp=tmp*10+sip[j++]-'0';
ip[i][cnt++]=tmp;
}
//printf("%d.%d.%d.%d",ip[i][0],ip[i][1],ip[i][2],ip[i][3]);
}
for(int i=0;i<m;i++)
{
scanf("%s",sweb);
int len=strlen(sweb);
int cnt=0;
for(int j=0;j<len;j++)
{
int tmp=0;
while(sweb[j]!='.'&&j<len)
tmp=tmp*10+sweb[j++]-'0';
web[i][cnt++]=tmp;
}
//printf("%d.%d.%d.%d",web[i][0],web[i][1],web[i][2],web[i][3]);
}
printf("Case #%d:\n",T++);
for(int i=0;i<m;i++)
{
int ans=0;
for(int q=0;q<n;q++)
{
for(int j=0;j<4;j++)
add[q][j]=ip[q][j]&web[i][j];
bool flag=true;
for(int k=0;k<q;k++)
if(add[q][0]==add[k][0]&&add[q][1]==add[k][1]&&add[q][2]==add[k][2]&&add[q][3]==add[k][3])
{
flag=false;
break;
}
if(flag) ans++;
}
printf("%d\n",ans);
}
}
return 0;
}