qdu 校赛 模拟的好题

来源:互联网 发布:年度十大精品网络剧 编辑:程序博客网 时间:2024/06/06 00:43

kk与cillyb的荣誉之战
发布时间: 2017年5月14日 17:11 最后更新: 2017年5月19日 11:40 时间限制: 1000ms 内存限制: 128M

描述
听说cillyb跟kk要solo了,众所周知cillyb跟kk是冤家一对,他们谁也不服谁,于是cillyb就约战kk再来一场编程solo,kk先发制人给cillyb了一大堆“字符”(字符是指计算机中使用的字母、数字、字和符号,包括:1、2、3、A、B、C、~!·#¥%……—*()——+,空语句等等。 — 来自百度百科) 叫嚣说:你能把这一堆字符(每个字符的ascll码)用16进制给我输出吗?!结果cillyb抢过键盘,1s就给秒掉了,cillyb说:那我也给你出个简单题,输入的一段字符串,你把这个字符串的长度len给我变成2进制,取后7位,如果除去后七位前边还有1那么就把取出来的7位数在第八位上+1(一共8位数了,第8位是1),然后变成16进制输出,然后将len右移(指的是len的二进制右移)7位,继续上述步骤,(例如10001000100,那么第一次取出来的后七位就是1000100,因为前边还有1,所以第一次取出来的变为11000100,然后将len右移7位得到1000。)最后后面紧接着原始字符串(每个字符的ascll)的16进制把!

kk一下子被惊到了,又要变2进制又要变16进制,只擅长yy的kk怎么会这么吓人的东西,于是就找青岛大学的各位大神们帮助,你们能帮kk解决这个问题并且击败青大手速狗cillyb吗?

输入
第一行输入测试组数t。
之后一段字符串,回车结束( 最多3000000 )

输出
如题意所示

样例输入1 复制
1
42
样例输出1
023432
样例输入2 复制
1
yukkuri shiteitte ne!!!
样例输出2
1779756B6B75726920736869746569747465206E65212121
提示
注意审题

模拟的好题 每次看到转进制就晕
16进制和2进制的转化
学长的巧妙代码我偷了过来
把二进制十六进制这种题通通换成整形处理

include <bits/stdc++.h>using namespace std;#define ll long long#define MOD 1000000007char s[3000005],ans[300];char str[]={"0123456789ABCDEF"};void print(int k){    int len=0;    for(int i=3;i>=0;i--)ans[i]='0';    while(k)    {        ans[len++]=str[k%16];        k/=16;    }    for(int i=1;i>=0;i--)putchar(ans[i]);}int main(){    int t;    scanf("%d",&t);getchar();    while(t--)    {        int len=0;char c;        while((c=getchar())!='\n'&&c!=EOF)s[len++]=c;        int tlen=len;        if(len==0)        {            puts("00");            continue;        }        while(len)        {            int pos=len&127;            if(pos!=len)pos+=128;            print(pos);            len>>=7;        }        for(int i=0;i<tlen;i++)        {            print((int)s[i]);        }        puts("");    }    return 0;}
原创粉丝点击