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. VS代码调试出现:当前不会命中断点。还没有为该文档加载任何符号。

    第一步:一定要检查最顶部自己设置的是 Release模式还是Debug模式!!!下面这个图就是在我搜了好多解决方式之后,突然发现自己开的是Release模式!!!吐血. 第二步:如果你已经确定了自己是 ...

  2. C#中datatable操作

    //1.新建datatable,为其添加自定义列DataTable dt = new DataTable();dt.Columns.AddRange(new DataColumn[] { new Da ...

  3. .Net Core2.2 在IIS发布

    .Net Core应用发布到IIS主要是如下的三个步骤: (1)在Windows Server上安装 .Net Core Hosting Bundle (2)在IIS管理器中创建IIS站点 (3)部署 ...

  4. drf之组件(认证、权限、排序、过滤、分页等)和xadmin、coreapi

    认证Authentication 可以在配置文件中配置全局默认的认证方案 REST_FRAMEWORK = { 'DEFAULT_AUTHENTICATION_CLASSES': ( 'rest_fr ...

  5. Node.js 连接 MongoDB数据库

    安装指令:npm install mongodb var mongodb = require("mongodb");// console.log(mongodb); var Mon ...

  6. Vue搭建脚手架2

    Vue2.0搭建Vue脚手架(vue-cli) 在网上找了很多的搭建脚手架教程,但都不求甚解.终于找到2个比较好的教程,读者可对比阅读1和2,在这里分享给大家,希望对初学者有所帮助.ps:高手请绕道. ...

  7. JavaScript 函数(一)

    一.函数概述 1.概述 把一段相对独立的具有特定功能的代码块封装起来,形成一个独立实体,就是函数,起个名字(函数名),在后续开发中可以反复调用函数的作用就是封装一段代码,将来可以重复使用. 二.使用函 ...

  8. 滥用exchage远程调用域管理员API接口

    0x00 前言 在大多数的Active Directory和Exchange中,Exchange服务器具有很高的权限,即Exchange服务器上的管理员可以很容易地将权限提升到域管理员权限,我在zdi ...

  9. MYSQL入门这一篇就够了

    安装概述 分为5.6与,5.7版本,5.7的安装与5.6略有不同,因为依赖BOOST库,下面给出2个版本的安装脚本,直接运行即可 Mysql 5.6 [root@Tuiliu ~]# cat mysq ...

  10. C#语法一些简化备忘

    有些传统的写法,可以简写,之前没留意到,现在才注意到 IDE0031: Null check can be simplified entity.Unit = entity.Unit == null ? ...