/*
1、排序:IP作为第一关键字,前缀长度作为第二关键字
2、从小到大合并:考虑相邻元素,但是需要注意,要知道他们的表示范围,要能判断包含关系
3、同级合并: 要能求并集。
*/
#include<bits/stdc++.h>
typedef long long ll;
using namespace std;
//存储结构
typedef struct {
string ip="";
ll length=0;
ll min;
ll max;
ll sum=0;
} IP;
list<IP> ip;
ll n;
string sub="/", dot=".";
const ll one=1;
//判断a是否是b的子集
bool isSubset(const IP a, const IP b) {
if(a.length<b.length) {
//有效长度越大,集合越小,集合要是小了,那肯定不能是父集了
return false;
}
if(a.min>=b.min&&a.max<=b.max) {
return true;
} else {
return false;
}
}
bool canMerge(const IP&a, const IP&b) {
IP c=a;
c.length-=1;
//offset:低offset要全部为0才算合法ip
ll offset=32-c.length;
//首先判断是否合法,一个是长度,另一个是看是否能保证低offset位为0
if(c.length<1 || c.sum!=((c.sum>>offset)<<offset)) {
return false
CCF认证 201812-3CIDR合并-带注释
最新推荐文章于 2021-08-18 10:52:54 发布
本文详细介绍了2018年CCF认证中关于CIDR(Classless Inter-Domain Routing)的部分,结合具体实例探讨了如何进行CIDR的合并操作,并提供了详细的注释辅助理解。
摘要由CSDN通过智能技术生成