CSP CIDR合并 100分题解

【计算机网络 (谢希仁) 习题题解】第4章 网络层 (2)——划分子网;CIDR 计算机网络 第7版 (谢希仁) 习题题解 第4章 网络层 阅读详情

思路分析
这道题的题目一如既往的长,并且在其中给出了一些没有用的信息,比如说什么样的地址是不合法的,这些信息具有混淆性。
这道题有点类似于一道模拟题,跟着题目的意思做就好了,但是在程序设计方面可能需要一些构思。比如说IP前缀,有不止一种方法来存储。我在这里采用的方法是分部分存储。比如说1.0.0.0/16这个就以/为分界线,分为前后两大部份,前面那部分又以.分为四部分进行存储,这样的存储方式有一个好处,就是简单,明了,计算爽,就很好玩。
代码部分

#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

#define ll long long

struct node {
	vector<int> pre;//前部分
	int suff;//后部分
	bool operator < (const node& c) const {
		int k = 0;
		while (k < pre.size()) {
			if (pre[k] != c.pre[k]) return pre[k] < c.pre[k];
			++k;
		}
		return suff < c.suff;
	}
};

//对ip前缀输入进行规范化
void mysplit(node& x, string now) {
	vector<string> buff;
	int k = 0;
	while (k < now.size() && now[k] != '/') ++k;
	if (k != now.size()) buff.insert(buff.begin(), now.substr(k + 1, now.size() - k - 1));
	buff.insert(buff.begin(), now.substr(0, k));
	vector<int> pre;
	int tmp = 0;
	for (int i = 0; i < buff[0].size(); ++i) {
		if (buff[0][i] == '.') {
			pre.push_back(tmp);
			tmp = 0;
		}
		else tmp = tmp * 10 + buff[0][i] - 48;
	}
	pre.push_back(tmp);
	k = 0;
	while (k < 4) {
		if (k >= pre.size()) x.pre.push_back(0);
		else x.pre.push_back(pre[k]);
		++k;
	}
	if (buff.size() == 1) x.suff = 8 * pre.size();
	else if (buff.size() == 2) {
		int tmp = 0;
		for (int i = 0; i < buff[1].size(); ++i) tmp = tmp * 10 + buff[1][i] - 48;
		x.suff = tmp;
	}
	return;
}

//判断ip前缀b是否为ip前缀a的子集
bool isequal(node& a, node& b) {
	if (a.suff > b.suff) return false;
	int bits = a.suff;
	int k = bits / 8;
	for (int i = 0; i < k; ++i) {
		if (a.pre[i] != b.pre[i]) return false;
	}
	int extra = bits % 8;
	if (extra == 0) return true;
	else {
		int r = 8 - extra;
		int ae = a.pre[k] >> r;
		int be = b.pre[k] >> r;
		return ae == be;
	}
}

//跟isequal函数差不多,只是多了一个前缀长度的比较
bool _isequal(node& a, node& b) {
	if (a.suff != b.suff) return false;
	--a.suff, --b.suff;//将前缀长度减1
	return isequal(a, b);
}

//创造一个新的ip前缀
node crea(node a) {
	int suff = a.suff;
	int k = suff / 8, extra = 8 - suff % 8;
	a.pre[k] >>= extra;
	a.pre[k] <<= extra;
	return a;
}

int main()
{
	int k;
	cin >> k;
	vector<node> box;
	while (k--) {
		string now;
		cin >> now;
		node x;
		mysplit(x, now);
		box.push_back(x);
	}
	sort(box.begin(), box.end());
	vector<node> clean;//存储子集合并的结果
	clean.push_back(box[0]);
	for (int i = 1; i < box.size(); ++i) {
		if (!isequal(clean.back(), box[i])) clean.push_back(box[i]);
	}
	k = 1;
	//下面进行位合并
	while (clean.begin() + k != clean.end()) {
		node ta = *(clean.begin() + k);
		node tb = *(clean.begin() + k - 1);
		if (_isequal(ta, tb)) {
			node now = crea(ta);
			--k;
			clean.erase(clean.begin() + k);
			clean.erase(clean.begin() + k);
			clean.insert(clean.begin() + k, now);
			if (k == 0) ++k;
		}
		else ++k;
	}
	//输出
	for (int i = 0; i < clean.size(); ++i) {
		for (int j = 0; j < clean[i].pre.size(); ++j) {
			if (j != 0) cout << '.';
			cout << clean[i].pre[j];
		}
		cout << '/';
		cout << clean[i].suff << endl;
	}
	return 0;
}
计算机网络之 CIDR(附常见、常考例题解析) 无分类编址,即无类别域间路由选择(Classless Inter-Domain Routing)——CIDR 主要特点 消除了传统的A类、B类、C类地址划分子网的概念 使用各种长度 “网络前缀” 来代替分类地址中网络号和子网号 CIDR使用 “斜线记忆法”,又称为"CIDR记法" ,即在IP地址后面加上一个斜线 “/”,然后写上网络前缀所占的比特数。如,166.100.20.82/20表示在这个32位的IP地址中,前20位表示网络前缀,后面12位主机号。 网络前缀相同的IP地址空间组成了CIDR地址块,地 阅读详情

相关推荐

【信息科学与工程学】【运营科学】第二篇 C4信息与通信网络运营 (C4) ——数据中心网络运营04

典型值:λ1​∈[−0.02,−0.01], λ2​∈[−0.01,0], η1​,η3​∈[0.1,0.3], η2​,η4​∈[0.05,0.15]参数:δ1​∈[−0.8,−0.3], δ2​∈[−0.5,−0.2], δ3​∈[−0.4,−0.1], δ4​∈[−0.6,−0.2]参数:φ1​∈[0.1,0.3], φ2​∈[−0.2,−0.05], φ3​∈[−0.1,0.1], φ4​∈[−0.3,−0.1]参数:α∈[0.3,0.6], β∈[0.2,0.4], γ∈[0.01,0.03]

weixin_49199313的博客 1217

路由汇聚算法的实例分析

一:转换网络地址为二进制数 比如: 使用CIDR技术把4个C类网络202.15.145.0/24 、202.15.147.0/24 、202.15.149.0/24 和202.15.150.0/24汇聚成一个超网,得到的地址是 二:进行汇聚(取相同的部分进行汇聚) 针对第三字节进行汇聚,取相同的部分进行汇聚 145:10010001 147:10010011 149:10010101 1...

爱学习的JackYang的博客 6229

手把手教你用FPGA实现SGMII接口:从IP核配置到板级调试全流程

本文详细介绍了如何在Xilinx 7系列FPGA上实现SGMII(Serial Gigabit Media Independent Interface)接口的全流程,包括IP核配置、约束编写和硬件调试。通过具体的硬件选型建议、软件工具链配置和PCB设计规范,帮助开发者快速构建稳定可靠的千兆通信链路,并提供了常见故障排查和性能优化技巧。

weixin_29194693的博客 296

CSP CIDR合并 40分

TODO: 用pair做来排序会更方便 #include <iostream> #include <unordered_map> #include <algorithm> #include<vector> using namespace std; const int N = 1e5 + 10; int n; string str; struct IP{ string ips; int pre; }ip[N]; int str_to_in

匿名用户 230

在trae CN中使用conda环境(已解决)

Trae CN 是字节跳动于 2025 年 3 月 3 日发布的国内首个 AI 原生集成开发环境(AI IDE)123。

zwzscnds的博客 6940

Windows下QT5.15.2安装MQTT模块全攻略(附分支选择避坑指南)

本文详细介绍了在Windows环境下为QT5.15.2安装MQTT模块的完整流程,包括环境准备、源码获取、编译配置及项目集成等关键步骤。特别针对分支选择、依赖项处理和常见错误提供了实用解决方案,帮助开发者高效完成MQTT模块的安装与调试,适用于物联网开发场景。

weixin_29224589的博客 466

【计算机网络】一道CIDR计算题:某单位申请了一段IP地址: 200.23.16.0/23。 单位内由4个部门(A,B,C,D)组成,每个部门门的主机数

1.题目 某单位申请了一-段IP地址: 200.23.16.0/23。 单位 内由4个部门J(A,B,C,D)组成,每个部门的主机数 量分别是: 200(A), 100(B), 50(C), 40(D)。试将单 位的总地址块200.23.16.0/23划分为4个子网分配 各4个部门。 ◆1.写出每个子网(地址块) ◆2. 每个子网的网络 前缀?子网掩码? ◆3.每个子网的广播地址?主机可用地址范...

... 2万+

实测对比:DECIMER、Img2Mol、MolScribe,哪个化学结构识别工具更靠谱?

化学结构识别(CSR)工具的核心任务是将分子结构图像转换为SMILES(Simplified Molecular Input Line Entry System)表示。这一过程需要克服图像质量差异、绘制风格变化以及特殊基团识别等挑战。三款工具采用不同的技术路线:DECIMER:基于EfficientNetV2+Transformer架构,优势在于处理标准期刊文献中的分子图示Img2Mol。

weixin_32576389的博客 348

计算机网络:网络层(无分类编址CIDR、计算题讲解)

地址码计算、路由聚合计算、最长前缀匹配、B类地址很快将分配完毕!路由表中的项目急剧增长!无分类域间路由选择1.消除了传统的A类,B类和c类地址以及划分子网的概念。2.融合子网地址与子网掩码,方便子网划分。CIDR记法IP地址后加上“/”,然后写上网络前缀(可以任意长度)的位数。

浩泽学编程的博客 2743

KylinOS 离线安装 MinIO【图文步骤】

在国产操作系统 KylinOS 中安装 MinIO,详细步骤...

甘蓝的专栏 1538

redhawk如何看高toggle rate instance

1.图形界面View-Power Map - Toggle Map of Instances。redhawk通过报告和图形界面两种方式查看高toggle rate的instance。2.看warning log,在adsRpt/Warn里,搜toggle rate。我正在「拾陆楼」和朋友们讨论有趣的话题,你⼀起来吧?

m0_61544122的博客 625

CCF认证 csp第15次 第3题 CIDR合并 (java 100分)

开始搜的题解是90分的,因为对java不熟悉,就从里面学了很多东西,indexOf,split,还有处理合并的方法。 最后一个点过不了,我开始我的优化之路。 题解的排序是插入排序,这样是O(n*n*log(n)),我用sort,就可以降到O(n*log(n))。 在合并的过程中,题解的方法模拟的时候用remove操作,这样加上本来需要O(n)的扫描时间,就是O(n*n)复杂度。 把它优化成...

xuzonghao的博客 659

LSTM在交通流量预测中的应用:优化城市交通管理

我们使用的数据集来自某个城市的交通监测系统,包含多个监测点在不同时间段内的交通流量记录。每个监测点的数据包括时间戳、交通流量、天气状况和道路状态等信息。

斌擎科技 1259

新CCF-CSP认证历年真题解

CSP认证考什么怎么考?      CCF计算机职业资格认证的每一道试题都十分经典,覆盖现实世界中方方面面的问题。这个历年试题解主要使用C/C++语言编写,将逐步增加Python和Java的解题程序。程序中附有注释,力求解题思路清晰简洁,值得珍藏与模仿。   逐题改写过程中,富文本编辑器写的博客将全部用Markdown编辑器改写。改写的第一题,都增加了Python和Java的解题程序。   本文本来只是一个索引链接,为了更加易于使用,格式做了调整,界面更加简洁。原来博文《CCF-CSP认证历年真题解》阅读量

海岛Blog 2万+

PyQt5开发应聘简历模版

该工具旨在帮助用户对Excel、CSV格式的数据进行快速导入、分析及可视化展示,支持折线图、柱状图、饼图等多种图表类型,提供数据筛选、排序、统计等功能,适用于企业数据分析人员日常工作。:一款用于本地文件管理的桌面应用,支持文件的新建、复制、移动、删除、重命名等基本操作,具备文件搜索、分类整理、批量操作及文件信息查看等功能,提升用户文件管理效率。:熟悉QSS(Qt Style Sheet)样式表,可对PyQt5界面进行个性化美化,包括控件颜色、字体、边框、布局等样式定制,提升应用视觉体验。

ybmzlqzj的博客 83

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

CCF-CSP认证历年真题解

CSP认证考什么怎么考? CCF计算机职业资格认证的每一道试题都十分经典,覆盖现实世界中方方面面的问题。这个历年试题解主要使用C/C++语言编写,将逐步增加Python和Java的解题程序。程序中附有注释,力求解题思路清晰简洁,值得珍藏与模仿。 逐题改写过程中,富文本编辑器写的博客将全部用Markdown编辑器改写。改写的第一题,都增加了Python和Java的解题程序。 2021.04第22次: CCF202104-1 灰度直方图(100分)【计数】 CCF202104-2 邻域均值(100分.

海岛Blog 34万+

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

CCF CSP 历年题解(C/C++)【截至2019年】

本人水平有限 目前只能做前两题 后面的随机可能会有 就脸厚的先写一个吧 (捂脸) 第一题 一般都是小模拟题 细心一点 注意一下格式之类的很容易就出来的 第二题 就是一道大模拟题 耐心一点 适当懂stl容器会很有帮助 第三题 字符串处理 我的弱项 主要是题目太长 越看越慌 (汗) 第四题 一般涉及图论 也都可能是dp 反正就是一些比较难一点的算法 第五题 emmmm 我就看...

qq_28640193的博客 3450

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

ccf-csp 2018冬季真题题解

小明上学 题目背景   小明是汉东省政法大学附属中学的一名学生,他每天都要骑自行车往返于家和学校。为了能尽可能充足地睡眠,他希望能够预计自己上学所需要的时间。他上学需要经过数段道路,相邻两段道路之间设有至多一盏红绿灯。   京州市的红绿灯是这样工作的:每盏红绿灯有红、黄、绿三盏灯和一个能够显示倒计时的显示牌。假设红绿灯被设定为红灯 r 秒,黄灯 y 秒,绿灯 g 秒,那么从 0 时刻起,[0,r) 秒内亮红灯,车辆不许通过;[r, r+g) 秒内亮绿灯,车辆允许通过;[r+g, r+g+y) 秒内亮黄灯..

Raymond_YP的博客 401

CCF CSP入坑指南 (含难度分析 试题目录及答案 部分答案有解析更新至201912 包含全部前四道题解及小部分第五题解)

第一题 基础数据处理,包括大小比较、计数、排序,不超过一层的for循环。 第二题 递推,排序,不超过三层的for循环。 第三题 字符串处理,递推,考查数据结构构造能力,不超过三层的for循环。 第四题 动态规划,贪心算法,图论最短路径,最小生成树等。 第五题 网络流,图论,字符串,考查数据结构构造能力,以及非常人的随机应变能力。 ...

宋旭升的博客 6万+

CSP

试题清单 试题编号试题名称最高得分查看我的提交操作 201903-1小中大100查看我的提交查看试题/答题 201903-2二十四点100查看我的提交查看试题/答题 201903-3损坏的RAID5100查看我的提交查看试题/答题 201903-4消息传递接口100查看我的提交查看试题/答题 201903-5317号子任务查看我的提交查看试题/答题 201812-5管道清...

weixin_43731369的博客 498

算法与数据结构专栏 目录

文章目录前言LeetCodeCSP 前言 此为算法与数据结构目录,专栏主要记录自己刷算法题时解题过程、思路以及自己学习算法时的所得,同时专栏也会见证自己的成长。此专栏会一直连载下去,学习无止境。如果有不对的地方或有待改善的地方,希望可以留言交流学习。 LeetCode [leetcode]翻转矩阵后的得分&&weekly-contest-91总结 [leetcode]柠檬水找零&...

诗和远方,代码和你 326

CCF历届真题 部分题解 Python实现

CCF 部分题解,欢迎交流讨论!!! 试题编号 试题名称 最高得分 查看我的提交 操作 202006-1 线性分类器 100 查看我的提交 查看试题/答题 202006-2 稀疏向量 100 查看我的提交 查看试题/答题 202006-3 Markdown渲染器 查看我的提交 查看试题/答题 202006-4 1246 0 查看我的提交 查看试题/答题 20..

101 010 000 2256

无分类编址CIDR

无分类编址CIDR 构成超网 最长前缀匹配

weixin_51711289的博客 844

CSP CCF: 201812-3 CIDR合并 (C++)

目录题目来源数据特点题目提示知识点注意点20分 题目来源 CIDR合并 数据特点 题目提示 知识点 注意点 20分 数据特点: 测试点1、2输入中只有标准型的IP前缀(输入中无省略情况),IP前缀个数与输入的个数相同(不需要处理合并的情况, 只需要排序)。 解决方案: xxxx ...

qq_45936312的博客 537

CSP认证201812-3 CIDR合并(超详细解析---大模拟)

题目链接粘贴读者需要账号才能看到,所以这里不再张贴。 (本人模拟黑洞,如有口胡错误不要介意,嘻嘻

qq_41645482的博客 2553

CSP认证CIDR合并

这个题已经给出了解决的步骤,按题目的三步走就可以 难点: 将ip地址翻译成long long长整型的整数,进行排序 设前一个ip的前缀长度为len,前一个ip的前len位==后一个相邻的ip的前len位,则从ip列表中删除后一个ip前缀 如果相邻的两个ip的前缀长度相等,都为len,且则两个ip的前len位相差1,则两个ip前缀可以合并为一个 #include <iostream> using namespace std; #include <string> #include

qq_44651133的博客 395
上一篇: PAT A1142 2020.04.02
下一篇: CSP 化学方程式 100分题解
me_code
博客等级 码龄8年 1粉丝 5原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值