题目链接: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. leetcode.字符串.344反转字符串-Java

    1. 具体题目 编写一个函数,其作用是将输入的字符串反转过来.输入字符串以字符数组 char[] 的形式给出.不要给另外的数组分配额外的空间,你必须原地修改输入数组.使用 O(1) 的额外空间解决这一 ...

  2. jvm学习(3)方法区、堆、对象存储位置

    方法区 方法区,Method Area, 对于习惯在HotSpot虚拟机上开发和部署程序的开发者来说,很多人愿意把方法区称为“永久代”(Permanent Generation),本质上两者并不等价, ...

  3. bfs(标记整个棋盘)

    1004 四子连棋 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold       题目描述 Description 在一个4*4的棋盘上摆放了14颗棋子,其中有7颗白色 ...

  4. P2639 [USACO09OCT]Bessie的体重问题Bessie's Weight

    题目传送门 这题和01背包最大的区别在于它没有价值,所以我们可以人工给它赋一个价值,由于要求体积最大,把价值赋成体积即可.顺带一提,这题数据范围很大,二维会MLE,要压缩成一维才可以AC 下面给出参考 ...

  5. 进程池和multiprocess.Pool模块

    一.为什么要有进程池 首先,创建进程需要消耗时间,销毁进程也需要时间.其次,即使开启了成千上万的进程,操作系统也不能让它们同时执行,这样反而会影响程序的效率.因此我们不能无限制的根据任务开启或者结束进 ...

  6. Codeforces 208E. Blood Cousins

    传送门 题目大意: 小C喜欢研究族谱,这一天小C拿到了一整张族谱. 小C先要定义一下k-祖先. x的1-祖先指的是x的父亲 x的k-祖先指的是x的(k-1)-祖先的父亲 小C接下来要定义k-兄弟 x的 ...

  7. C#设计模式:桥接模式(Bridge Pattern)

    一,桥接模式,直接上代码 using System; using System.Collections.Generic; using System.Linq; using System.Text; u ...

  8. JS面向对象——原型模型

    以下通过一段示例代码,说明原型模型中的基本概念以及知识点. <!DOCTYPE html> <html> <head> <title>原型模型</ ...

  9. Ubuntu14.04(nginx+php+mysql+vsftp)配置安装流程

    Ubuntu14.04(nginx+php+mysql+vsftp)配置安装流程 1.先切换到root用户 sudo  su 2.更新软件源 apt update apt-get upgrade 3. ...

  10. 03.Linux-CentOS系统user用户改密码问题

    问题:[user@localhost ~]$ passwdChanging password for user user.Changing password for user.(current) UN ...