信息解码(Message Decoding, ACM/ICPC World Finals 1991, UVa 213)
![](https://img-blog.csdn.net/20170410133446280?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXFfMjQxMjIzODU=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
技巧点
- 自己实现读入多行字符串的函数
- 二进制数的移位技巧
- 通过<\len,value>可以唯一确定一个二进制数编码
#include<stdio.h>
#include<string.h>
#include<math.h>
using namespace std;
char codes[1000];
int readcodes() {
int i = 0;
while (true) {
char c = getchar();
if (c == '\n'||c=='\r')
return 1;
if (c == EOF)
return 0;
codes[++i] = c;
}
}
int readint(int len) {
int num = 0;
while (len--) {
num *=2;
num += getchar() - '0';
}
return num;
}
int main() {
while (readcodes()) {
int len = readint(3);
int num;
while (len != 0) {
num = readint(len);
if (num == (1 << len) - 1) {
len = readint(3);
continue;
}
int loc = pow(2, len) - len + num;
printf("%c", codes[loc]);
}
printf("\n");
getchar();
}
return 0;
}