[题解]Shorten IPv6 Address-模拟(2019牛客多校第六场B题)
题目链接: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题)的更多相关文章
- 2019牛客多校第八场 F题 Flowers 计算几何+线段树
2019牛客多校第八场 F题 Flowers 先枚举出三角形内部的点D. 下面所说的旋转没有指明逆时针还是顺时针则是指逆时针旋转. 固定内部点的答案的获取 anti(A)anti(A)anti(A)或 ...
- 2019牛客多校第六场 B - Shorten IPv6 Address 模拟
B - Shorten IPv6 Address 题意 给你\(128\)位的二进制,转换为十六进制. 每\(4\)位十六进制分为\(1\)组,每两组用一个\(":"\)分开. 每 ...
- 2019牛客多校第四场 I题 后缀自动机_后缀数组_求两个串de公共子串的种类数
目录 求若干个串的公共子串个数相关变形题 对一个串建后缀自动机,另一个串在上面跑同时计数 广义后缀自动机 后缀数组 其他:POJ 3415 求两个串长度至少为k的公共子串数量 @(牛客多校第四场 I题 ...
- 2019 牛客多校第六场 B Shorten IPv6 Address
题目链接:https://ac.nowcoder.com/acm/contest/886/B 题目大意 给定一个 128 位的二进制 ip 地址,让你以 16 位一组,每组转成 16 进制,用冒号连接 ...
- [题解]Magic Line-计算几何(2019牛客多校第三场H题)
题目链接:https://ac.nowcoder.com/acm/contest/883/H 题意: 给你偶数个点的坐标,找出一条直线将这n个点分成数量相等的两部分 并在这条直线上取不同的两个点,表示 ...
- [题解]Crazy Binary String-前缀和(2019牛客多校第三场B题)
题目链接:https://ac.nowcoder.com/acm/contest/883/B 题意: 给你一段长度为n,且只有 ‘0’ 和 ‘1’ 组成的字符串 a[0,...,n-1].求子串中 ‘ ...
- 2019牛客多校第六场H Pair(数位DP 多个数相关)题解
题意: 传送门 给你\(A,B,C\),要求你给出有多少对\((x, y)\)满足\(x\in [1,A],y\in [1,B]\),且满足以下任意一个条件:\(x \& y > C\) ...
- 2019 牛客多校第六场 D Move
题目链接:https://ac.nowcoder.com/acm/contest/886/D 题解摘自官方题解 题目大意 有 K 个体积相同的箱子,有 N 个体积相同或相异的物品,现要按照如下策略装箱 ...
- Palindrome Mouse(2019年牛客多校第六场C题+回文树+树状数组)
目录 题目链接 题意 思路 代码 题目链接 传送门 题意 问\(s\)串中所有本质不同的回文子串中有多少对回文子串满足\(a\)是\(b\)的子串. 思路 参考代码:传送门 本质不同的回文子串肯定是要 ...
随机推荐
- android 学习路线
转载来源:https://blog.csdn.net/lixuce1234/article/details/77947405 jixiaohua发了一篇一个老鸟也发了一份他给公司内部小伙伴整理的路线图 ...
- P2737 [USACO4.1]麦香牛块Beef McNuggets
题目描述 农夫布朗的奶牛们正在进行斗争,因为它们听说麦当劳正在考虑引进一种新产品:麦香牛块.奶牛们正在想尽一切办法让这种可怕的设想泡汤.奶牛们进行斗争的策略之一是“劣质的包装”.“看,”奶牛们说,“如 ...
- 报错: no such table:django_session解决方式
如果出现这个错误 “no such table:django_session” 这个错误跟Session的机制有关, 既然要从Web服务器端来记录用户信息, 那么一定要有存放用户session id对 ...
- jquery实现表单验证与页面加载之后执行渲染
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- MS DOS 常用命令整理
最近在开发用到一些dos下的一些指令,还有bat文件,特别是bat的便捷性让我在生活和开发过程中好好使用. dos指令: java com.pdcss.util.JacobService > D ...
- Java实现ArrayList
说明都在注释: package adt.array; import java.util.Iterator; import java.util.NoSuchElementException; /** * ...
- JavaScript中正则使用
字符串是编程时涉及到的最多的一种数据结构,对字符串进行操作的需求几乎无处不在.比如判断一个字符串是否是合法的Email地址,虽然可以编程提取@前后的子串,再分别判断是否是单词和域名,但这样做不但麻烦, ...
- foreach与正常for循环效率对比
foreach foreach编译成字节码之后,使用的是迭代器实现的. foreach特点: 无须获取容器大小 需要创建额外的迭代器变量 遍历期间得到的是对象,没有索引位置信息,因此不能进行赋值操作. ...
- css 当文字过多时以....省略
<!-- 公告 --> <p class="rst-promotion">公告: {{shopInfo.rst.promotion_info}}</p ...
- ftp 上传文件时报 cant open output connection for file "ftp://129.28.149.240/shop/web/index.html". Reason: "550 Permission denied.".
原因:没有写入权限 修改权限即可 vsftpd.conf vim /etc/vsftpd.conf write_enable=YES #加入这句