XTU1154:Encode

题目描述

行程编码是一种常见的无损压缩方式。比如针对于纯英文小写字符我们可以按以下方式进行编码:每个字节的低5位表示英文小写字母的序号(从0到25),高3位表示此字母连续的次数-1(0到7依次表示连续1到8次)。比如说一个字节的二进制为00100001,其表示字符串bb。给你一个字符串,试将字符串编码为对应的行程编码,并将编码字节的16进制输出。

输入

第一行是一个整数K,表示样例的个数。以后每行是一个待编码的小写英文字母组成的字符串,其长度不超过1000个字符。

输出

每行输出一个编码的16进制数码串(10~15使用a~f表示)。

样例输入

4
aabb
a
aaaaaaaaa
zzzzzzzzz

样例输出

2021
00
e000
f919

Source

XTUCPC2013

#include <stdio.h>
#include <string.h>
#include <algorithm>
using namespace std;

char str[1005];
int hash[10] = {0,0,32,64,96,128,160,192,224};
int len;

void change(int s)
{
    int s1,s2;
    s1 = s/16;
    s2 = s%16;
    if(s1>=0 && s1<=9)
        printf("%d",s1);
    else
        printf("%c",s1-10+‘a‘);
    if(s2>=0 && s2<=9)
        printf("%d",s2);
    else
        printf("%c",s2-10+‘a‘);
}

void solve(int word,int cnt)
{
    int sum = 0;
    while(cnt>8)
    {
        sum = hash[8]+word;
        change(sum);
        cnt-=8;
    }
    if(cnt)
    {
        sum = hash[cnt]+word;
        change(sum);
    }
}

int main()
{
    int t,i,j,cnt,word;
    scanf("%d",&t);
    while(t--)
    {
        scanf("%s",str);
        len = strlen(str);
        word = str[0]-‘a‘;
        cnt = 1;
        for(i = 1; i<len; i++)
        {
            if(str[i] == word+‘a‘)
                cnt++;
            else
            {
                solve(word,cnt);
                word = str[i]-‘a‘;
                cnt = 1;
            }
        }
        solve(word,cnt);
        printf("\n");
    }

    return 0;
}

XTU1154:Encode,布布扣,bubuko.com

时间: 2024-10-14 13:16:45

XTU1154:Encode的相关文章

x264代码剖析(八):encode()函数之x264_encoder_close()函数

x264代码剖析(八):encode()函数之x264_encoder_close()函数 encode()函数是x264的主干函数.主要包含x264_encoder_open()函数.x264_encoder_headers()函数.x264_encoder_encode()函数与x264_encoder_close()函数四大部分,当中x264_encoder_encode()函数是其核心部分,详细的H.264视频编码算法均在此模块. 上三篇博文主要分析了x264_encoder_open(

x264代码剖析(五):encode()函数之x264_encoder_open()函数

x264代码剖析(五):encode()函数之x264_encoder_open()函数 我们知道x264源码从主观上分为两大块,一是解析函数parse(),另一个是编码函数encode().解析函数parse()较简单,并且不涉及H.264编码算法,故不是重点,所以我们要学习的重点自然而然地就是编码函数encode()了. encode()函数是x264的主干函数,主要包括x264_encoder_open()函数.x264_encoder_headers()函数.x264_encoder_e

x264代码剖析(七):encode()函数之x264_encoder_encode()函数

x264代码剖析(七):encode()函数之x264_encoder_encode()函数 encode()函数是x264的主干函数,主要包括x264_encoder_open()函数.x264_encoder_headers()函数.x264_encoder_encode()函数与x264_encoder_close()函数四大部分,其中x264_encoder_encode()函数是其核心部分,具体的H.264视频编码算法均在此模块.上两篇博文主要分析了x264_encoder_open(

x264代码剖析(三):主函数main()、解析函数parse()与编码函数encode()

x264代码剖析(三):主函数main().解析函数parse()与编码函数encode() x264的入口函数为main().main()函数首先调用parse()解析输入的参数,然后调用encode()编码YUV数据.parse()首先调用x264_param_default()为保存参数的x264_param_t结构体赋默认值:然后在一个大循环中通过getopt_long()解析通过命令行传递来的存储在argv[]中的参数,并作相应的设置工作:最后调用select_input()和sele

Java 加密 base64 encode

[前言] 计算机中的数据都是二进制的,不管是字符串还是文件,而加密后的也是二进制的, 而我们要看到的往往是字符串,本文就介绍了将byte[]转为各种进制以及base64编码. [base64] 是一种编码方式,可以理解为复杂的进制,很多算法加密后输出的都是byte[],而这个byte[]对我们显示的形式是不友好的(乱码), 所以一般都是转为base64的,当然也可以转为其他进制.. [代码] [java] view plaincopy package com.uikoo9.util.encryp

vagrant rsync-auto 代码同步失败报错:UndefinedConversionError

今天使用vagrant ,代码同步:vagrant rsync-auto 发现代码同步失效了,几次重启之后发现启动报错: 有点疑惑,因为1h之前还同步过修改的代码,现在突然报错,目前仍然不明原因(这1h之内没有做过任何编码设置/修改的操作,仍然诡异,留待大神研究吧~)以下直接说重点 报错的原因: vagrant的源码使用Ruby实现的,Ruby 转码的方法:encode 有转码兼容,GBK转码为UTF-8不兼容,所以报错,报错行的源代码: data << io.readpartial(READ

base64:URL背景图片与web页面性能优化

一.base64百科 Base64是网络上最常见的用于传输8Bit字节代码的编码方式之一,可用于在HTTP环境下传递较长的标识信息. 某人: 唉,我彻底废柴了,为何上面明明是中文,洒家却看不懂嘞,为什么? 好吧,我也不喜欢专业术语的解释.你只要知道,base64编码就是长得像下面这样子的代码: thunder://QUFodHRwOi8vd3d3LmJhaWR1LmNvbS9pbWcvc3NsbTFfbG9nby5naWZaWg== 上面代码大家都熟悉吧,迅雷下载链接哦(咳咳,该地址很纯洁),就

为什么URL中的中文需要Encode两次?

在URL中传参的时候常常需要传入中文,这个时候就需要对中文参数进行编码,即URLEncode.但是,常常是Encode两次,而不是一次,为什么呢? 首先要知道,tomcat会自动解码一次: 这样的话,如果只Encode一次就传过去,会出现两种情况: 1.Tomcat的decode字符集与你Encode的字符集一致,正常显示中文: 2.decode与encode字符集不一致,乱码: 现在假设encode两次,那么: tomcat解码一次,将encode一次的字符串传出去: 程序员手动decode一

通过Adobe Encode CC 2017,将一张静态图生成一个长时间的视频。

最近转格式用了encode,发现它比CS6有很大的提升啊. 前提:encode是一款解码的软件.我一般是将其转为H.264的mp4使用.将视频文件拖入encode,我们就能看到任务列表新添加了一条.默认的转化格式刚好是我需要的. 而当一张图片作为源被放入encode中时,会被认为是一段5s视频.因此我们如果需要做一个长时间的静态视频,可以将一张图大量复制,全选后拖入下图红框区域.