[水]百度之星资格赛 1003 IP聚合
发布时间:2020-12-13 22:27:10 所属栏目:百科 来源:网络整理
导读:Problem Description 当今世界,网络已经无处不在了,小度熊由于犯了错误,当上了度度公司的网络管理员,他手上有大量的 IP列表,小度熊想知道在某个固定的子网掩码下,有多少个网络地址。网络地址等于子网掩码与 IP 地址按位进行与运算后的结果,例如: 子
题目意思很清楚,只要使用按位与的的方法,计算出相应结果就可以了。。 水题一道,可以练练常用的数据结构... #include <cstdio> #include <vector> #include <set> #include <iostream> #include <cstring> using namespace std; const int MAXN = 1005; struct IntNode{int a,b,c,d;}; IntNode ym[MAXN]; //掩码 IntNode ip[MAXN]; //ip地址 set<long long> res; int T,N,M; int cas=1; long long calculate(int i,int j) { long long tmpa,tmpb,tmpc,tmpd,sum; tmpa = ym[i].a & ip[j].a; tmpb = ym[i].b & ip[j].b; tmpc = ym[i].c & ip[j].c; tmpd = ym[i].d & ip[j].d; sum = tmpd + tmpc * 1000 + tmpb * 1000000 + tmpa * 1000000000; return sum; } int main() { cin>>T; while(cin>>N>>M) { memset(ym,sizeof(ym)); memset(ip,sizeof(ip)); for(int i = 1;i <= N; i++) scanf("%d.%d.%d.%d",&ip[i].a,&ip[i].b,&ip[i].c,&ip[i].d); for(int i = 1;i <= M; i++) scanf("%d.%d.%d.%d",&ym[i].a,&ym[i].b,&ym[i].c,&ym[i].d); printf("Case #%d:n",cas++); for (int i = 1; i <= M; i++) { res.clear(); for(int j = 1; j <= N; j++) { long long num = calculate(i,j); if (!res.count(num)) res.insert(num); } printf("%dn",res.size()); } } return 0; } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |