zoukankan      html  css  js  c++  java
  • ZOJ 3713 In 7-bit

    Very often, especially in programming contests, we treat a sequence of non-whitespace characters as a string. But sometimes, a string may contain whitespace characters or even be empty. We can have such strings quoted and escaped to handle these cases. However, a different approach is putting the length of the string before it. As most strings are short in practice, it would be a waste of space to encode the length as a 64-bit unsigned integer or add a extra separator between the length and the string. That's why a 7-bit encoded integer is introduced here.

    To store the string length by 7-bit encoding, we should regard the length as a binary integer. It should be written out by seven bits at a time, starting with the seven least-significant (i.e. 7 rightmost) bits. The highest (i.e. leftmost) bit of a byte indicates whether there are more bytes to be written after this one. If the integer fits in seven bits, it takes only one byte of space. If the integer does not fit in seven bits, the highest bit is set to 1 on the first byte and written out. The integer is then shifted by seven bits and the next byte is written. This process is repeated until the entire integer has been written.

    With the help of 7-bit encoded integer, we can store each string as a length-prefixed string by concatenating its 7-bit encoded length and its raw content (i.e. the original string).

    Input

    There are multiple test cases. The first line of input is an integer T indicating the number of test cases.

    Each test case is simply a string in a single line with at most 3000000 characters.

    Output

    For each test case, output the corresponding length-prefixed string in uppercase hexadecimal. See sample for more details.

    Sample Input

    3
    42
    yukkuri shiteitte ne!!!
    https://en.wikipedia.org/wiki/Answer_to_Life,_the_Universe,_and_Everything#Answer_to_the_Ultimate_Question_of_Life.2C_the_Universe_and_Everything_.2842.29
    

    Sample Output

    023432
    1779756B6B75726920736869746569747465206E65212121
    9A0168747470733A2F2F656E2E77696B6970656469612E6F72672F77696B692F416E737765725F746F5F4C6966652C5F7468655F556E6976657273652C5F616E645F45766572797468696E6723416E737765725F74
    
    
    题目都看不懂直接看别人博客,才看懂题意。
    #include <iostream>
    #include <string.h>
    #include <stdlib.h>
    #include <stdio.h>
    #include <algorithm>
    #include <math.h>
    #include <map>
    
    using namespace std;
    char a[3000005];
    int main()
    {
        int t;
        scanf("%d",&t);
        getchar();
        while(t--)
        {
            gets(a);
            int len=strlen(a);
            int l=len;
            if(l==0)
            {
                printf("00
    ");
                continue;
            }
            while(l)
            {
                int t1=l%128;
                l/=128;
                if(l)
                    t1+=128;
                printf("%02X",t1);
            }
            for(int i=0;i<len;i++)
                printf("%02X",a[i]);
            printf("
    ");
        }
        return 0;
    }


    
    
  • 相关阅读:
    oracle 11g如何完全卸载
    【Python】Django Model 怎么使用 UUID 作为主键?
    【云计算】K8S DaemonSet 每个node上都运行一个pod
    【Linux】为啥查某个进程的线程,查出来的所有线程的pid不一样啊
    【JavaScript】SVG vs Canvas vs WebGL
    【Python】使用 sphinx 制作简洁而又美观的文档
    【云计算】监控 告警 怎么做
    【Redis】Redis分布式集群几点说道
    【Hadoop】HIVE 小结概览
    【Hadoop】Hive HSQ 使用 && 自定义HQL函数
  • 原文地址:https://www.cnblogs.com/dacc123/p/8228731.html
Copyright © 2011-2022 走看看