模拟 2015百度之星资格赛 1003 IP聚合

题目传送门

 1 /*
 2     模拟水题,排序后找出重复的ip就可以了
 3 */
 4 #include <cstdio>
 5 #include <iostream>
 6 #include <algorithm>
 7 #include <cstring>
 8 #include <string>
 9 #include <cmath>
10 using namespace std;
11
12 const int MAXN = 1e3 + 10;
13 const int INF = 0x3f3f3f3f;
14 struct Ip
15 {
16     int a, b, c, d;
17 }ip[MAXN];
18 struct H
19 {
20     int a, b, c, d;
21 }h[MAXN];
22 int ans[55];
23
24 bool cmp(H x, H y)
25 {
26     if (x.a == y.a)
27     {
28         if (x.b == y.b)
29         {
30             if (x.c == y.c)    return x.d < y.d;
31             else    return x.c < y.c;
32         }
33         else    return x.b < y.b;
34     }
35     else    return x.a < y.a;
36 }
37
38 int main(void)        //2015百度之星资格赛 1003 IP聚合
39 {
40     int t, cas = 0;
41     scanf ("%d", &t);
42     while (t--)
43     {
44         int n, m;    scanf ("%d%d", &n, &m);
45         for (int i=1; i<=n; ++i)
46             scanf ("%d.%d.%d.%d", &ip[i].a, &ip[i].b, &ip[i].c, &ip[i].d);
47
48         memset (ans, 0, sizeof (ans));
49         for (int i=1; i<=m; ++i)
50         {
51             int u, v, w, x;
52             scanf ("%d.%d.%d.%d", &u, &v, &w, &x);
53             for (int j=1; j<=n; ++j)
54             {
55                 h[j].a = (ip[j].a & u);    h[j].b = (ip[j].b & v);
56                 h[j].c = (ip[j].c & w);    h[j].d = (ip[j].d & x);
57             }
58
59             sort (h+1, h+1+n, cmp);
60
61             int cnt = 0;
62             for (int k=2; k<=n; ++k)
63             {
64                 if (h[k].a == h[k-1].a &&
65                     h[k].b == h[k-1].b &&
66                     h[k].c == h[k-1].c &&
67                     h[k].d == h[k-1].d)    cnt++;
68             }
69
70             ans[i] = (n - cnt);
71         }
72
73         printf ("Case #%d:\n", ++cas);
74         for (int i=1; i<=m; ++i)    printf ("%d\n", ans[i]);
75     }
76
77     return 0;
78 }
79
80 /*
81 2
82 5 2
83 192.168.1.0
84 192.168.1.101
85 192.168.2.5
86 192.168.2.7
87 202.14.27.235
88 255.255.255.0
89 255.255.0.0
90 4 2
91 127.127.0.1
92 10.134.52.0
93 127.0.10.1
94 10.134.0.2
95 235.235.0.0
96 1.57.16.0
97 */
时间: 2024-10-01 19:14:01

模拟 2015百度之星资格赛 1003 IP聚合的相关文章

ACM学习历程—BestCoder 2015百度之星资格赛1003 IP聚合(set容器)

Problem Description 当今世界,网络已经无处不在了,小度熊由于犯了错误,当上了度度公司的网络管理员,他手上有大量的 IP列表,小度熊想知道在某个固定的子网掩码下,有多少个网络地址.网络地址等于子网掩码与 IP 地址按位进行与运算后的结果,例如: 子网掩码:A.B.C.D IP 地址:a.b.c.d 网络地址:(A&a).(B&b).(C&c).(D&d) Input 第一行包含一个整数T ,(1≤T≤50) 代表测试数据的组数, 接下来T 组测试数据.每组

模拟 百度之星资格赛 1003 IP聚合

题目传送门 1 /* 2 模拟水题,排序后找出重复的ip就可以了 3 */ 4 #include <cstdio> 5 #include <iostream> 6 #include <algorithm> 7 #include <cstring> 8 #include <string> 9 #include <cmath> 10 using namespace std; 11 12 const int MAXN = 1e3 + 10;

[百度之星]资格赛:IP聚合

保持着也不知道什么情怀,觉得到现在才能发出来.这道题做完之后看了其他人的代码,然后再看我的,不得不说,真是幼稚的很,尤其是输入这一块,都什么跟什么啊. 但相较于之前来说,不像以前慌张了,学会先思考再去写代码,明白了函数的一些用处与含义.我知道一个大四的老狗说这种话倒还真是够没面子的,但希望自己每天都在成长.你眼里的小草,我心中的大树. IP聚合 Problem Description 当今世界,网络已经无处不在了,小度熊由于犯了错误,当上了度度公司的网络管理员,他手上有大量的 IP列表,小度熊想

贪心/数学 2015百度之星资格赛 1004 放盘子

题目传送门 1 /* 2 贪心:小度熊先在多边形中间放一个盘子,接下来无论来访者怎么放,小度熊都根据多边形中心与来访者的盘子对称着放就能获胜. 3 题目已经给出方法,就是能否把盘子放在多边形中间,那么和边心距比较 4 */ 5 #include <cstdio> 6 #include <algorithm> 7 #include <cmath> 8 #include <cstring> 9 using namespace std; 10 11 const i

找规律 2015百度之星资格赛 1001 大搬家

题目传送门 1 /* 2 找规律:题目真心读不懂,排列组合的题目 3 */ 4 #include <cstdio> 5 #include <iostream> 6 #include <algorithm> 7 #include <cstring> 8 using namespace std; 9 10 typedef long long ll; 11 12 const int MAXN = 1e6 + 10; 13 const int INF = 0x3f3

字符串处理 2015百度之星资格赛 1002 列变位法解密

题目传送门 1 /* 2 字符串处理:要求解码,然而二维数组开不下,可以直接输出 3 只要在余数的地方判断一下就行了,vector的效率不高 4 另外:感觉麻烦的地方应该纸上写写就清楚了 5 */ 6 #include <cstdio> 7 #include <iostream> 8 #include <algorithm> 9 #include <cstring> 10 #include <string> 11 #include <cma

2017百度之星资格赛 1003:度度熊与邪恶大魔王(DP)

.navbar-nav > li.active > a { background-image: none; background-color: #058; } .navbar-inverse #navbar > .navbar-nav > li > a:hover, .navbar-inverse #navbar > .navbar-nav > li > a:focus { background-image: none; background-color:

2015百度之星资格赛解题报告

1001 大搬家 Accepts: 1516 Submissions: 6288 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Problem Description 近期B厂组织了一次大搬家,所有人都要按照指示换到指定的座位上.指示的内容是坐在位置i上的人要搬到位置j上.现在B厂有N个人,一对一到N个位置上.搬家之后也是一一对应的,改变的只有位次. 在第一次搬家后,度度熊由于疏忽

ip聚合(百度之星资格赛1003)

IP聚合 点击这里 Problem Description 当今世界,网络已经无处不在了,小度熊由于犯了错误,当上了度度公司的网络管理员,他手上有大量的 IP列表,小度熊想知道在某个固定的子网掩码下,有多少个网络地址.网络地址等于子网掩码与 IP 地址按位进行与运算后的结果,例如: 子网掩码:A.B.C.D IP 地址:a.b.c.d 网络地址:(A&a).(B&b).(C&c).(D&d) Input 第一行包含一个整数T,(1≤T≤50)代表测试数据的组数, 接下来T组