CCF-CIDR合并-201812-3
看着很长的一道题目,其实还可以...但我只有90分...可能有些细节没有注意到...难受!
思路:
数据结构:
string str ; 存储32位01串
int len: 前缀长度
首先将输入的ip标准化,使用了split()函数,和find(),substr()的string_STL
自定义排序
大小合并 : 从前往后
同级合并: 从后往前
#include <bits/stdc++.h>
using namespace std;
typedef vector <string> vs;
const int N=1e6+;
string zero="";
struct node {
string str;
int len;
bool operator<(const node& x) const {
if (str==x.str) return len<x.len;
return str<x.str;
}
};
node t[N],tmp[N]; int n;
vs split(string str,const char flag='.') {
istringstream iss(str);
vs ans;
while (getline(iss,str,flag))
if (str.size())
ans.push_back(str);
return ans;
}
int to_int (string str,int base) {
int ans=;
for (int i=;i<str.size();i++)
ans=ans*base+str[i]-'';
return ans;
}
void get_str (string &str, vs sv) {
for (int i=;i<sv.size();i++) {
int num=to_int(sv[i],);
for (int j=;j<=;j++) {
str[(i+)*-j]=''+num%;
num=num/;
}
}
//cout<<str<<endl;
}
void input_node (node &x ) {
x.str=zero;
string str; cin>>str;
int pos=str.find("/");
if (pos==-) {
vs sv=split(str);
x.len=*sv.size();
get_str(x.str,sv);
}
else {
string s1=str.substr(,pos),s2=str.substr(pos+);
x.len=to_int(s2,);
vs sv=split(s1);
get_str(x.str,sv);
}
}
void output_node (node x) {
for (int i=;i<;i++) {
cout<<to_int(x.str.substr(i*,),);
if (i!=) cout<<".";
else cout<<"/";
}
cout<<x.len<<"\n";
}
bool isok (node t1,node t2) {
if (t1.len<t2.len) return ;
for (int i=;i<t2.len;i++)
if (t1.str[i]!=t2.str[i])
return ;
return ;
}
void merg1() {
int cnt=;
for (int i=;i<=n;i++)
if (!isok(t[i],t[cnt]))
t[++cnt]=t[i];
n=cnt;
}
bool isok2 (node t1,node t2) {
if (t1.len!=t2.len) return ;
for (int i=;i<t1.len-;i++)
if (t1.str[i]!=t2.str[i])
return ;
return ;
}
void merg2() {
int cnt=;
for (int i=n;i>= ;i--) {
if (i>=&&isok2(t[i],t[i-])) t[i-].len--;
else tmp[++cnt]=t[i];
}
for (int i=;i<=cnt;i++)
t[i]=tmp[cnt-i+];
n=cnt;
}
int main ()
{
ios::sync_with_stdio(false);
zero+=zero; zero+=zero;
cin>>n;
for (int i=;i<=n;i++) input_node(t[i]);
sort (t+,t++n);
merg1();
merg2();
for (int i=;i<=n;i++)
output_node(t[i]);
return ;
}
CCF-CIDR合并-201812-3的更多相关文章
- CCF 201812-3 CIDR合并
CCF 201812-3 CIDR合并 //100分 93ms #include<stdio.h>//CCF上stdio.h比cstdio快!!! #include<string.h ...
- CCF201812-3 CIDR合并
按题意模拟即可...主要CCF吞代码... #include<bits/stdc++.h> #define pb push_back #define mp make_pair #defin ...
- CIDR合并
code #include <iostream> #include <list> #include <sstream> #include <vector> ...
- CCF-CSP题解 201812-3 CIDR合并
题目想求与给定前缀列表等价的包含IP前缀数目最少的前缀列表. 首先是怎么存储前缀列表.用一个long long存储IP地址,再存一个前缀长度,封装在一个结构体里\(<ipNum, len> ...
- CCF-CSP认证 C++题解目录
持续更新中,记录刷题过程并分享一下小小的心得总结. 试题编号 试题名称 标签 202006-1 线性分类器 | 题解 线性规划 202006-2 稀疏向量| 题解 归并排序思想 202006-3 化学 ...
- CIDR
CIDR的介绍: CIDR(Classless Inter-Domain Routing,无类域间路由选择)它消除了传统的A类.B类和C类地址以及划分子网的概念,因而可以更加有效地分配IPv4的地址空 ...
- 无分类编址(CIDR)构成超网
CIDR(无分类域间路由选择) CIDR最主要有两个以下特点: 消除传统的A,B,C地址和划分子网的概念,更有效的分配IPv4的地址空间,CIDR使IP地址又回到无分类的两级编码.记法:IP地址::= ...
- 第5章 子网划分和CIDR
第5章 子网划分和CIDR 划分网络 根据A类.B类或C类网络ID来识别网段具有一些局限性,主要是在网络级别之下不能对地址空间进行任何逻辑细分 如果一个IP是一个A类网络.数据报到达网关,然后传输到9 ...
- 无分类编址(CIDR,Class Inter-Domain-Routing)
CIDR全称是无分类域间路由选择,英文全称是Classless Inter-Domain Routing,大家多称之为无分类编址 CIDR的特点 (1)CIDR消除了传统的A类.B类和C类地址以及划分 ...
- IP地址和CIDR
IP地址(IPV4) IPV4的地址是一个32位的二进制数,由网络ID和主机ID两部分组成,用来在网络中唯一的标识一台计算机.IP地址通常用四组3位的十进制数表示,中间用.分割,例如:192.168. ...
随机推荐
- learning makefile string example
- Spring Boot :邮件服务
简单使用 1.pom 包配置 pom 包里面添加 spring-boot-starter-mail 包引用 <dependencies> <dependency> <gr ...
- 大数据Hadoop入门视频教程:Hadoop的快如入门
最新在学习hadoop .storm大数据相关技术,发现网上hadoop .storm 相关学习视频少之又少,这里整理了传智播客段海涛老师的hadoop学习视频,出来给大家学习交流. 视频下载地址:h ...
- c语言中,在结构体中如何将void *转存为具体需要的数据类型
1. 只需要将该void *类型成员,强制转换为具体的数据类型指针即可.需要注意的是,该强制转换是有风险的,转换时,必须确定void*指向内存实际数据为目标结构体格式,否则可能会出现内存越界访问,从而 ...
- 网络相关配置,SSH服务,bash, 元字符
作业一:临时配置网络(ip,网关,dns)+永久配置 设置IP和掩码ifconfig eth0 192.168.2.2 netmask 255.255.255.0设置网关route add defa ...
- 如何推进企业流程体系建设?_K2 BPM
推进全集团统一的流程体系为什么比想象的难? 很多企业在推进全集团的流程管理过程中,经常会有一种“望山跑死马”的感觉.“各成员公司都建立起与集团公司统一的流程管理体系”,看似很简单一件事情,但没有经过良 ...
- 关于C#mvc用iis发布,虚拟目录的问题。
mvc关于iis发布虚拟目录的问题,解决方法是修改代码中路径的方式,例如ajax中常用的为url:“/Home/Index”,可修改为 url: '@Url.Action("Index&qu ...
- gateway 配置
server: port: spring: application: name: api-gateway eureka: client: service-url: defaultZone: http: ...
- App测试之Monkey压力测试
- 移动端click事件无反应或反应慢 touchend事件页面滑动时频繁触发
H5页面的点击事件click 无论在浏览器 iframe还是小程序里面 都会出现点击无反应或者反应慢的情况出现 所以决定用touchend事件来代替click 但是touchend事件触发比较灵敏 在 ...