Shorten IPv6 Address
Posted 2462478392lee
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Shorten IPv6 Address相关的知识,希望对你有一定的参考价值。
题意:转换一个128位的二进制串,变成16进制,并且格式为x:x:x:x:x:x:x:x然后多个相邻的0变成::,且只有一个::,求变成的字典序最小且最短的字符串。
思路:大水题,但是就是一直wa,思路都一样的还是wa。先将二进制转化为十进制,然后用%x输出,因为连续的0可变短,但有优先级,首先选0长的,然后如果长度相等,先选中间,中间里面先选中间偏后,然后是最后,最后是前面。差不多就这意思吧。
#include<cstdio> #include<cstring> #include<algorithm> #include<vector> #include<map> #include<queue> #define ll long long using namespace std; const int N = 1000 + 10; char s[N];int a[10], r[10]; int main() int T; scanf("%d", &T); for (int tii = 1; tii <= T; tii++) scanf("%s", s + 1); for (int i = 1; i <= 8; i++) a[i] = 0; for (int j = 1; j <= 16; j++) a[i] = a[i] * 2 + s[(i - 1) * 16 + j] - ‘0‘; memset(r, 0, sizeof(r)); printf("Case #%d: ", tii); int id = 0; for (int i = 8; i > 0; i--) if (a[i] == 0) r[i] = r[i + 1] + 1; if (r[id] < r[i]) id = i; if (r[id] == r[i] && r[id] + id - 1 == 8 && i != 1) id = i; for (int i = 1; i <= 8; i++) if (id == i && r[i] >= 2) if (id == 1) printf(":"); printf(":"); i += r[id] - 1; else printf("%x", a[i]); if (i != 8) printf(":"); printf("\n"); return 0;
以上是关于Shorten IPv6 Address的主要内容,如果未能解决你的问题,请参考以下文章
idea 启动shorten command line too long 错误解析
AtCoderACGC001C Shorten Diameter
idea运行main方法报错,提示Shorten command line for xxx
如何在 IE11 上使用 Bitly V4 URL Shorten API
Intellij IDEA运行报Command line is too long.Shorten command linefor ...