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 错误解析

idea : shorten command line

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 ...