题目连接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=103454#problem/D
题目大意:给出一串数每一位对应一个其二进制编码(无1...1),后给出一串二进制编码,前三位为后面每个编码的位数,到1...1为止,输出每个编码对应字符。
题目分析:水题,题意较难理解,注意输入即可。
注意要点:无
AC代码:
#include<stdio.h>
#include<cstring>
#include<string>
#include<cmath>
#include<iostream>
#include<algorithm>
#include<vector>
#include<map>
using namespace std;
int main()
{
char s1[10010],s2[10010];
int n={0},a={0},t={0},m={0};
gets(s2);
while(gets(s1))
{
if (s1[0]!='0' && s1[0]!='1') {printf("\n"); strcpy(s2,s1); m=0; n=0; a=0; t=0;}
else{
int l=strlen(s1);
for (int i=0;i<l;i++){
if (t<3) {
n=n*2+s1[i]-'0';
t++;
}
else {
m++; a=a*2+s1[i]-'0';
}
if (n!=0 && m==n){
if(a==pow(2,n)-1){
n=0; a=0; m=0; t=0;
}
else{
int x;
x=a+pow(2,n)-n-1;
printf("%c",s2[x]);
}
m=0; a=0;
}
}
}
}
printf("\n");
}