标签:
本以为是一道比较复杂的题,我是没想到一写暴力就过了==……小编我还能说什么,就开了个set集合,重载一下<运算符,一开始还以为是所有的总的不同的值,后来发现居然是每一个不同的值的和……字典树也都不用加了,就水题一个……
#include <iostream> #include <cstring> #include <cstdio> #include <set> using namespace std; int T,n,m; struct IP { int a,b,c,d; bool operator < (const IP &x) const { if (x.a!=a) return x.a<a; else if (x.b!=b) return x.b<b; else if (x.c!=c) return x.c<c; else return x.d<d; } IP operator & (IP &x) { IP y; y.a=x.a&a; y.b=x.b&b; y.c=x.c&c; y.d=x.d&d; return y; } }; set<IP> d; IP a[1005]; int main() { int Case=1; scanf("%d",&T); while(T--) { memset(a,0,sizeof(a)); scanf("%d%d",&n,&m); for(int i=1;i<=n;i++) scanf("%d.%d.%d.%d",&a[i].a,&a[i].b,&a[i].c,&a[i].d); printf("Case #%d:\n",Case++); for(int i=1;i<=m;i++) { int ans=0; IP c; scanf("%d.%d.%d.%d",&c.a,&c.b,&c.c,&c.d); d.clear(); for(int i=1;i<=n;i++) { IP f; f=a[i]&c; if(!d.count(f)) { ans++; d.insert(f); } } printf("%d\n",ans); } } return 0; }
标签:
原文地址:http://blog.csdn.net/raalghul/article/details/51366291