P2815 IPv6地址压缩

题目背景

(友情提示:IPv6基础知识曾多次出现在NOIP初赛中)Internet Protocol,互联网协议,即为我们常说的IP。我们目前常说的IP主要指它的第四版,即IPv4,它由IETF于1981年发布。它的地址长度是32个二进制位,因此也就有2^32个IP地址可供使用,约为43亿,在当时,谁也没有料想到IPv4如此庞大的地址长度会有用完的一天。

在21世纪的今天,互联网的蓬勃发展早就了我们如今便利的生活。当下,世界人口已超过70亿,计算机和各种联网设备已经走入千家万户,而不再仅是上个世纪80年代科学家们的工具。此时便出现了人们日益增长的联网设备需要同落后IPv4地址长度之间的矛盾。尽管可以通过网络地址翻译能技术来共享IP地址,临时解决枯竭的问题,但显然不是长久之计。

IETF也有先见之明,早早地于1998年发布了IPv6协议,从微软2006年发布的Windows Vista开始成为默认安装的网络协议。作为IPv4的继任者,它的地址长度为128个二进制位,也就是2^128个IP地址可供使用。然而面对这冗长的地址,一位记忆力不好的网络工程师小明在配置路由表时遇到了许许多多多的困难,现在他找到了你,希望你帮忙编写一个程序来按照IPv6地址标准的格式压缩规则来压缩IPv6地址。

题目描述

IPv6格式

IPv6二进位制下为128位长度,以16位为一组,每组以冒号“:”隔开,可以分为8组,每组以4位十六进制方式表示。

例如:2001:0db8:0000:0000:0123:4567:89ab:cdef 是一个合法的IPv6地址。

同时IPv6地址在某些条件下可以压缩:

①每组数字代表的独立16进制数可以省略前位的0。

例如上面的IPv6地址可被压缩为:

2001:db8:0:0:123:4567:89ab:cdef

②可以用双冒号“::”表示一组0或多组连续的0,但只能出现一次

例如上面的IPv6地址可被压缩为:

2001:db8::123:4567:89ab:cdef

请你帮助记忆力不好的网络工程师小明解决他遇到的问题。

规则补充:

①输入数据为完全展开的IPv6地址,确保输入的IPv6地址不含双冒号,每组地址省略的0都会被补充上去。

②双冒号只能使用一次,因此我们压缩最长的全0组

比如:2001:0db8:0000:0000:1:0000:0000:0000

我们压缩为2001:db8:0:0:1::,而非2001:db8::1:0:0:0

③双冒号只能只用一次,因此我们在我们遇到地址中多个连续全0组长度相同时,我们压缩最前面的一个。

2001:0db8:0000:0000:ffff:0000:0000:1

压缩为2001:db8::ffff:0:0:1,而非2001:db8:0:0:ffff::1

④输入的IPv6地址可能无法被压缩,因此请照原样输出。

提示:本题所示的压缩规则与macOS(Darwin)默认的IPv6地址显示方式相同,而Windows和Linux只遇到一组全0时不会使用::进行压缩。但用此方法压缩过的IPv6地址一样可以被Windows和Linux正确识别。

例如:2001:0db8:ffff:0000:0123:4567:89ab:cdef

Darwin压缩为:2001:db8:ffff::123:4567:89ab:cdef

Linux、Windows压缩为:2001:db8:ffff:0:123:4567:89ab:cdef

输入格式

一串39个字符的字符串,代表一个完全展开的IPv6地址

输出格式

一串压缩后的IPv6地址

输入输出样例

输入 #1

240e:0014:6000:0000:0000:0000:0000:0001

输出 #1

240e:14:6000::1

输入 #2

2001:0db8:0000:0000:0000:0000:0000:0001

输出 #2

2001:db8::1

输入 #3

2001:4860:4860:0000:0000:0000:0000:8888

输出 #3

2001:4860:4860::8888

输入 #4

2400:8900:e000:0010:0000:0000:0000:0000

输出 #4

2400:8900:e000:10::

输入 #5

0000:0000:0000:0000:0000:0000:0000:0000

输出 #5

::

输入 #6

0000:0000:0000:0000:0000:0000:0000:0001

输出 #6

::1

输入 #7

2001:0db8:ffff:0000:0123:4567:89ab:cdef

输出 #7

2001:db8:ffff::123:4567:89ab:cdef

输入 #8

1234:5678:9abc:def0

洛谷 P2815 IPv6地址压缩 题解的更多相关文章

  1. 洛谷P1155 双栈排序题解(图论模型转换+二分图染色+栈)

    洛谷P1155 双栈排序题解(图论模型转换+二分图染色+栈) 标签:题解 阅读体验:https://zybuluo.com/Junlier/note/1311990 原题地址:洛谷P1155 双栈排序 ...

  2. 洛谷P1783 海滩防御 分析+题解代码

    洛谷P1783 海滩防御 分析+题解代码 题目描述: WLP同学最近迷上了一款网络联机对战游戏(终于知道为毛JOHNKRAM每天刷洛谷效率那么低了),但是他却为了这个游戏很苦恼,因为他在海边的造船厂和 ...

  3. 洛谷 1052 dp 状态压缩

    洛谷1052 dp 状态压缩 传送门 (https://www.luogu.org/problem/show?pid=1052#sub) 做完这道题之后,感觉涨了好多见识,以前做的好多状压题目都是将一 ...

  4. 洛谷P4047 [JSOI2010]部落划分题解

    洛谷P4047 [JSOI2010]部落划分题解 题目描述 聪聪研究发现,荒岛野人总是过着群居的生活,但是,并不是整个荒岛上的所有野人都属于同一个部落,野人们总是拉帮结派形成属于自己的部落,不同的部落 ...

  5. 浅谈分治 —— 洛谷P1228 地毯填补问题 题解

    如果想看原题网址的话请点击这里:地毯填补问题 原题: 题目描述 相传在一个古老的阿拉伯国家里,有一座宫殿.宫殿里有个四四方方的格子迷宫,国王选择驸马的方法非常特殊,也非常简单:公主就站在其中一个方格子 ...

  6. 洛谷10月月赛II题解

    [咻咻咻] (https://www.luogu.org/contestnew/show/11616) 令人窒息的洛谷月赛,即将参加NOIp的我竟然只会一道题(也可以说一道也不会),最终145的我只能 ...

  7. [洛谷P1823]音乐会的等待 题解(单调栈)

    [洛谷P1823]音乐会的等待 Description N个人正在排队进入一个音乐会.人们等得很无聊,于是他们开始转来转去,想在队伍里寻找自己的熟人.队列中任意两个人A和B,如果他们是相邻或他们之间没 ...

  8. BZOJ2527 & 洛谷3527:[Poi2011]Meteors——题解

    +++++++++++++++++++++++++++++++++++++++++++ +本文作者:luyouqi233. + +欢迎访问我的博客:http://www.cnblogs.com/luy ...

  9. 洛谷 p1516 青蛙的约会 题解

    dalao们真是太强了,吊打我无名蒟蒻 我连题解都看不懂,在此篇题解中,我尽量用语言描述,不用公式推导(dalao喜欢看公式的话绕道,这篇题解留给像我一样弱的) 进入正题 如果不会扩展欧里几德的话请先 ...

随机推荐

  1. jmeter(二十七)分布式压测注意事项

    之前的博客:jemter(二十三):分布式测试简略的介绍了利用jmeter做分布式测试的方法,当时只是介绍了背景和原因,以及基本的配置操作,有同学说写得不够详细. 正好今年双十一,我司的全链路压测,也 ...

  2. Java自学-操作符 逻辑操作符

    Java的逻辑运算符 逻辑运算符 示例 1 : 长路与 和 短路与 无论长路与还是短路与 两边的运算单元都是布尔值 都为真时,才为真 任意为假,就为假 区别: 长路与 两侧,都会被运算 短路与 只要第 ...

  3. 深圳宝安图书馆官网错误 HTTP Status 500 - Servlet.init() for servlet spring threw exception

    停留了一段时间没有动 打开https://www.balib.cn/balib/category/152 *********************************************** ...

  4. python爬虫User Agent用户代理

    UserAgent简介 UserAgent中文名为用户代理,是Http协议中的一部分,属于头域的组成部分,UserAgent也简称UA.它是一个特殊字符串头,是一种向访问网站提供你所使用的浏览器类型及 ...

  5. vue项目的各个文件作用

    vue项目的各个文件作用: build:放置的是webpack配置文件,一般不动,修改了必须重启服务器才能生效 config:放置针对开发环境和线上环境的配置文件,一般不动 修改后需重启 node_m ...

  6. HTML 初始

    HTML(Hyper Text Markup Language的缩写)中文译为“超文本标记语言”,主要是通过HTML标签对网页中的文本.图片.声音等内容进行描述. 一.HTML 骨架结构 每种语言都有 ...

  7. React的基本知识和优缺点

    阮一峰 React入门实例教程 知识点 1.html模板3个预加载的js文件,script的type属性 2.ReactDOM.render() 3.JSX语言:允许js和html的混写 4.comp ...

  8. SQLI-LABS LESS 1-LESS 22

    SQLI-LABS LESS 1-LESS 22 0x01:前言 因为最近感觉手注快忘光了,所以玩一遍sqli-labs巩固一下. sql注入,基于从服务器接收到的响应分类为 : ▲基于错误的SQL注 ...

  9. prometheus学习系列八: Prometheus Grafana展示平台

    在prometheus中,我们可以使用web页面进行数据的查询和展示, 不过展示效果不太理想,这里使用一款专业的展示平台进行展示. grafana安装 # 下载wget https://dl.graf ...

  10. pyechart基本使用大全

    charts_base 原文链接:https://blog.csdn.net/weixin_43735353/article/details/89328048 图表详细配置请参考 图表配置篇 基本图表 ...