题目链接:https://ac.nowcoder.com/acm/contest/886/B


题意:

您将获得一个IPv6地址,该地址是128位二进制字符串。请根据以下规则确定其最短的表示:

以十六进制表示形式表示地址,并使用冒号':'分割每四个十六进制数字。每四个数字称为一个字段。例如,'0000:0000:0123:4567:89ab:0000:0000:0000'

可以省略字段中的前导零。例如,上述IPv6地址可以缩短为 '0:0:123:4567:89ab:0:0:0'

由至少两个字段组成的连续零字段(靠近它们的冒号)可以用双冒号 '::' 替换。此外,地址中不能使用多个双冒号。

例如,上面的IPv6地址可以缩短为 '0:0:123:4567:89ab ::' 或 ':: 123:4567:89ab:0:0:0',但不能缩写为 ':: 123:4567: 89ab ::‘

如果有多个相同长度的最短格式,请使用字典序(将缩短的IPv6地址视为字符串)最小的一个

思路:

模拟处理字符串

个人感觉python比较好处理字符串,所以比赛的时候用python写的,python用的不多写得不好看,有python大佬的话就将就一下叭

先将二进制转为十六进制,并加入 “ : ”

然后将所有前导零去掉

寻找数目最多的相邻的 “ :0: ” ,将其变为 “ :: ”

注意:在可替换的 “ :0: ” 数目相同的情况下,换中间是比换最前和最后的优先级高的, 因为能多去掉一个冒号

(WA了无数发)

 t=int(input())
for i in range(t):
s=input()
l=len(s)
k=0; m=1; x=[]; y=['','','','','','','','','','','a','b','c','d','e','f']
for j in range(l-1,-1,-1):
k+=int(s[j])*m; m=m*2
if j%4==0:
x.append(y[k])
if j%16==0:
x.append(':')
k=0; m=1
x.reverse()
m=0; l=len(x)
for j in range(l):
if m==l:
break
if x[j]==':' and x[j+1]=='':
del x[j+1]
j-=1; m+=1
m+=1
m=0; l=len(x)
for j in range(l):
if m==l:
break
if x[j]==':' and x[j+1]=='':
del x[j+1]
j-=1; m+=1
m+=1
m=0; l=len(x)
for j in range(l):
if m==l:
break
if x[j]==':' and x[j+1]=='':
del x[j+1]
j-=1; m+=1
m+=1
x.append(':')
l=len(x); r=1; sum=0; ans=0; p=0
for j in range(l):
if x[j]==':':
if j!=l-1 and r==0 and x[j+1]=='':
sum+=1
else:
if sum>ans:
p=j-2*(sum+1); ans=sum; sum=0; r=1
if sum==ans and j!=l-1:
p=j-2*(sum+1); ans=sum; sum=0; r=1
if j==l-1 and sum>=ans:
if sum>ans or (sum==ans and p==0):
p=j-2*(sum+1); ans=sum; sum=0; r=1
if j!=l-1 and x[j+1]!='':
r=1
else:
r=0
if ans!=0:
if p+ans*2+2==len(x)-1:
f=1
else:
f=0
for j in range(ans*2+2):
del x[p]
if f==1:
if p==0:
x.insert(p, ':')
else:
x.insert(p, ':')
del x[0]
if f==0:
if p==0:
x.insert(p, ':')
del x[len(x) - 1]
else:
x.insert(p, ':')
del x[0]; del x[len(x)-1]
else:
del x[0]; del x[len(x) - 1]
print("Case #"+str(i+1)+": "+"".join(x))

[题解]Shorten IPv6 Address-模拟(2019牛客多校第六场B题)的更多相关文章

  1. 2019牛客多校第八场 F题 Flowers 计算几何+线段树

    2019牛客多校第八场 F题 Flowers 先枚举出三角形内部的点D. 下面所说的旋转没有指明逆时针还是顺时针则是指逆时针旋转. 固定内部点的答案的获取 anti(A)anti(A)anti(A)或 ...

  2. 2019牛客多校第六场 B - Shorten IPv6 Address 模拟

    B - Shorten IPv6 Address 题意 给你\(128\)位的二进制,转换为十六进制. 每\(4\)位十六进制分为\(1\)组,每两组用一个\(":"\)分开. 每 ...

  3. 2019牛客多校第四场 I题 后缀自动机_后缀数组_求两个串de公共子串的种类数

    目录 求若干个串的公共子串个数相关变形题 对一个串建后缀自动机,另一个串在上面跑同时计数 广义后缀自动机 后缀数组 其他:POJ 3415 求两个串长度至少为k的公共子串数量 @(牛客多校第四场 I题 ...

  4. 2019 牛客多校第六场 B Shorten IPv6 Address

    题目链接:https://ac.nowcoder.com/acm/contest/886/B 题目大意 给定一个 128 位的二进制 ip 地址,让你以 16 位一组,每组转成 16 进制,用冒号连接 ...

  5. [题解]Magic Line-计算几何(2019牛客多校第三场H题)

    题目链接:https://ac.nowcoder.com/acm/contest/883/H 题意: 给你偶数个点的坐标,找出一条直线将这n个点分成数量相等的两部分 并在这条直线上取不同的两个点,表示 ...

  6. [题解]Crazy Binary String-前缀和(2019牛客多校第三场B题)

    题目链接:https://ac.nowcoder.com/acm/contest/883/B 题意: 给你一段长度为n,且只有 ‘0’ 和 ‘1’ 组成的字符串 a[0,...,n-1].求子串中 ‘ ...

  7. 2019牛客多校第六场H Pair(数位DP 多个数相关)题解

    题意: 传送门 给你\(A,B,C\),要求你给出有多少对\((x, y)\)满足\(x\in [1,A],y\in [1,B]\),且满足以下任意一个条件:\(x \& y > C\) ...

  8. 2019 牛客多校第六场 D Move

    题目链接:https://ac.nowcoder.com/acm/contest/886/D 题解摘自官方题解 题目大意 有 K 个体积相同的箱子,有 N 个体积相同或相异的物品,现要按照如下策略装箱 ...

  9. Palindrome Mouse(2019年牛客多校第六场C题+回文树+树状数组)

    目录 题目链接 题意 思路 代码 题目链接 传送门 题意 问\(s\)串中所有本质不同的回文子串中有多少对回文子串满足\(a\)是\(b\)的子串. 思路 参考代码:传送门 本质不同的回文子串肯定是要 ...

随机推荐

  1. k8s 组件介绍-kube-schedule

    kubernetes scheduler 基本原理 kubernetes scheduler 作为一个单独的进程部署在 master 节点上,它会 watch kube-apiserver 进程去发现 ...

  2. 复制书稿 (dp+贪心)

    [题目描述] 现在要把m本有顺序的书分给k个人复制(抄写),每一个人的抄写速度都一样,一本书不允许给两个(或以上)的人抄写,分给每一个人的书,必须是连续的,比如不能把第一.第三和第四本书给同一个人抄写 ...

  3. 如何学习 websocket ?

    如何学习 websocket ? 使用 HTML https://github.com/phoboslab/jsmpeg MPEG1 进行播放 https://w3c.github.io/media- ...

  4. JDK8之ArrayList源码

    ArrayList三个构造器 /** * Default initial capacity. */ private static final int DEFAULT_CAPACITY = 10; // ...

  5. .net core 使用RSA获取私钥证书并签名

    RSA在.NET Core的改动 以前我们使用RSA加密主要是使用RSACryptoServiceProvider这个类,在.NET Core中也有这个类,但是这个类并不支持跨平台,所以如果你是用这个 ...

  6. android 好的源码链接

    1.自定义表情键盘:https://github.com/w446108264/XhsEmoticonsKeyboard 2.底部导航栏https://github.com/Ashok-Varma/B ...

  7. 【问题解决方案】在Markdown中生成可以跳转到正文的目录的方法

    背景: 一篇博文比较长时,有目录会更方便更一目了然 这里介绍一下使用生成跳转目录的格式 注:GFM即github flavoured markdown 格式 <!-- GFM-TOC --> ...

  8. 【问题解决方案】Mathtype中丢失Mplugin.dll的问题

    网络上搜索到的答案: Mathtype中丢失Mplugin.dll,把Mplugin.dll文件放到Mathtype安装根目录下就好了. 然而试过以后仍然不行 事实是: 如果下载的mathtype安装 ...

  9. ES2015箭头函数与普通函数对比理解

    直接返回表达式 var odds = evens.map(v => v + 1); var nums = evens.map((v, i) => v + i); var odds = ev ...

  10. Redis这篇就够了

    Redis 简介 Redis 优势 Redis 数据类型 string hash list set Zset 小总结 基本命令 发布订阅 简介 实例 发布订阅常用命令 事务 实例 Redis 事务命令 ...