【百度之星】-IP聚合
问题描述:
当今世界,网络已经无处不在了,小度熊由于犯了错误,当上了度度公司的网络管理员,他手上有大量的 IP列表,小度熊想知道在某个固定的子网掩码下,有多少个网络地址。网络地址等于子网掩码与 IP 地址按位进行与运算后的结果,例如:
子网掩码:A.B.C.D
IP 地址:a.b.c.d
网络地址:(A&a).(B&b).(C&c).(D&d)
第一行包含一个整数TT,(1 \leq T \leq 50)(1≤T≤50)代表测试数据的组数,
接下来TT组测试数据。每组测试数据包含若干行,
第一行两个正整数N(1 \leq N \leq 1000, 1 \leq M \leq 50),MN(1≤N≤1000,1≤M≤50),M。接下来NN行,每行一个字符串,代表一个 IP 地址,
再接下来MM行,每行一个字符串代表子网掩码。IP 地址和子网掩码均采用 A.B.C.DA.B.C.D的形式,其中A,B,C,DA,B,C,D均为非负整数,且小于等于255。
对于每组测试数据,输出两行:
第一行输出: "Case #i:" 。ii代表第ii组测试数据。
第二行输出测试数据的结果,对于每组数据中的每一个子网掩码,输出在此子网掩码下的网络地址的数量。
2
5 2
192.168.1.0
192.168.1.101
192.168.2.5
192.168.2.7
202.14.27.235
255.255.255.0
255.255.0.0
4 2
127.127.0.1
10.134.52.0
127.0.10.1
10.134.0.2
235.235.0.0
1.57.16.0
Case #1:
3
2
Case #2:
3
4
问题分析:
使用map,哈希一下结果就好了。原来将int -> string 来存network address 发现 TLE了,后来改成直接存Long long 187ms过了。结论就是: 库函数中,int 转 string的方法是在是太慢了。
代码如下:
#include <iostream>
#include <cstdio>
#include <string>
#include <math.h>
#include <map>
#include <algorithm>
#include <sstream> #define LL __int64
#define MOD 1000000007
using namespace std; const int MAXN = ;
int n;
LL IP[MAXN][], Mask[], netAddress;
map<LL, int>strHashMp; template<class T>
void toString(string & result, const T& t)
{
ostringstream oss;
oss << t;
result = oss.str();
} int main()
{
int T, cas = , n,m;
cin>>T;
while(T--){
scanf("%d%d",&n,&m);
for(int i = ; i < n; i ++)
scanf("%d.%d.%d.%d",&IP[i][],&IP[i][],&IP[i][],&IP[i][]);
printf("Case #%d:\n",++cas);
for(int i = ; i < m; i ++){
scanf("%I64d.%I64d.%I64d.%I64d",&Mask[],&Mask[],&Mask[],&Mask[]);
strHashMp.clear();
int ans = ;
for(int j = ; j < n ; j ++){
string strAdd = "";
netAddress = ;
for(int k = ; k < ; k ++){
LL andVal = Mask[k] & IP[j][k];
netAddress = netAddress * + andVal;
}
if(strHashMp.find(netAddress) == strHashMp.end()){
ans ++;
strHashMp[netAddress] = ;
}
}
printf("%d\n", ans);
}
}//system("pause");
return ;
}
当今世界,网络已经无处不在了,小度熊由于犯了错误,当上了度度公司的网络管理员,他手上有大量的 IP列表,小度熊想知道在某个固定的子网掩码下,有多少个网络地址。网络地址等于子网掩码与 IP 地址按位进行与运算后的结果,例如:
子网掩码:A.B.C.D
IP 地址:a.b.c.d
网络地址:(A&a).(B&b).(C&c).(D&d)
第一行包含一个整数TT,(1 \leq T \leq 50)(1≤T≤50)代表测试数据的组数,
接下来TT组测试数据。每组测试数据包含若干行,
第一行两个正整数N(1 \leq N \leq 1000, 1 \leq M \leq 50),MN(1≤N≤1000,1≤M≤50),M。接下来NN行,每行一个字符串,代表一个 IP 地址,
再接下来MM行,每行一个字符串代表子网掩码。IP 地址和子网掩码均采用 A.B.C.DA.B.C.D的形式,其中A,B,C,DA,B,C,D均为非负整数,且小于等于255。
对于每组测试数据,输出两行:
第一行输出: "Case #i:" 。ii代表第ii组测试数据。
第二行输出测试数据的结果,对于每组数据中的每一个子网掩码,输出在此子网掩码下的网络地址的数量。
2
5 2
192.168.1.0
192.168.1.101
192.168.2.5
192.168.2.7
202.14.27.235
255.255.255.0
255.255.0.0
4 2
127.127.0.1
10.134.52.0
127.0.10.1
10.134.0.2
235.235.0.0
1.57.16.0
Case #1:
3
2
Case #2:
3
4
【百度之星】-IP聚合的更多相关文章
- 2015百度之星 IP聚合
IP聚合 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Problem Descri ...
- 百度之星IP聚合(水题map&字符处理)
虽然题目停水的,但是好像字符处理运用的还比较合适 Problem Description 当今世界,网络已经无处不在了,小度熊由于犯了错误,当上了度度公司的网络管理员,他手上有大量的 IP列表,小度熊 ...
- 模拟 2015百度之星资格赛 1003 IP聚合
题目传送门 /* 模拟水题,排序后找出重复的ip就可以了 */ #include <cstdio> #include <iostream> #include <algor ...
- 模拟 百度之星资格赛 1003 IP聚合
题目传送门 /* 模拟水题,排序后找出重复的ip就可以了 */ #include <cstdio> #include <iostream> #include <algor ...
- ip聚合(百度之星资格赛1003)
IP聚合 点击这里 Problem Description 当今世界,网络已经无处不在了,小度熊由于犯了错误,当上了度度公司的网络管理员,他手上有大量的 IP列表,小度熊想知道在某个固定的子网掩码下, ...
- 百度之星资格赛--IP聚合
IP聚合 Accepts: 1901 Submissions: 4979 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/6553 ...
- [百度之星]资格赛:IP聚合
保持着也不知道什么情怀,觉得到现在才能发出来.这道题做完之后看了其他人的代码,然后再看我的,不得不说,真是幼稚的很,尤其是输入这一块,都什么跟什么啊. 但相较于之前来说,不像以前慌张了,学会先思考再去 ...
- 2015百度之星之-IP聚合
IP聚合 Accepts: 138 Submissions: 293 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 6553 ...
- BestCoder 百度之星2016
20160523 百度之星初赛第一场 1001 All X Problem Description F(x, m)F(x,m) 代表一个全是由数字xx组成的mm位数字.请计算,以下式子是否成立: F( ...
- 2016百度之星 初赛2A ABEF
只做了1001 1002 1005 1006.剩下2题可能以后补? http://acm.hdu.edu.cn/search.php?field=problem&key=2016%22%B0% ...
随机推荐
- importdata-- matlab
source file: test.dat *************************** Day1 Day2 Day3 Day4 Day5 Day6 Day795.01 76.2 ...
- Java基础学习总结(87)——坚持写Java等技术类博客的好处
1.加深对技术点的理解 每天写博客,可以加深对技术点的理解,假如工作中,对某个技术点运用的不熟,当你通过博客的形式写出来,这个过程中,遇到不懂的知识点,你就会查阅相关的资料,弄明白他. 2.自己日后用 ...
- BNUOJ 5966 Rank of Tetris
Rank of Tetris Time Limit: 1000ms Memory Limit: 32768KB This problem will be judged on HDU. Original ...
- JAVA虚拟机运行时内存划分--运行时数据区域
Java虚拟机在执行java程序时会把内存划分为以下几个不同的数据区域: java虚拟机内存划分(运行时)1.线程私有的: 程序计数器(Program Counter Register):可以看作当前 ...
- Ubuntu 16.04安装搜索拼音输入法
Linux下唯一一款大厂出的输入法 1.下载 http://pinyin.sogou.com/linux/?r=pinyin 2.安装 sudo dpkg -i sogoupinyin_2.1.0.0 ...
- sql server internal book
Frequently Bought Together + + Total price: $131.71 Add all three to CartAdd all three to List Buy t ...
- oracle约束总结(not null/unique/primary key/foreign key/check)
约束(constraint):对创建的表的列属性.字段进行的限制. 诸如:not null/unique/primary key/foreign key/check 作用范围: ①列级 ...
- A Taxonomy for Performance
A Taxonomy for Performance In this section, we introduce some basic performance metrics. These provi ...
- erlang二进制数据垃圾回收机制
erlang二进制数据在内存中有两种存在形式,当数据大小不到 64 bytes,就直接存在进程堆内.假设超过了64 bytes.就被保存到进程外的共享堆里,能够给节点内全部进程共享. erlang有两 ...
- jvm 堆内存 栈内存 大小设置
4种方式配置不同作用域的jvm的堆栈内存. 1.Eclise 中设置jvm内存: 改动eclipse的配置文件,对全部project都起作用 改动eclipse ...