这道题还是对紫书上的做了修改吧,修改后就AC了
#include <iostream>
#include <cstring>
#include <string>
using namespace std;
int readchar(); // 读取一个非换行字符
int readnchar(int c);
int readcodes();
int code[(1<<3)][(1<<8)];
string result;
int main() {
while (readcodes()) {
while (1) {
int len = readnchar(3);
if (len == 0)
break;
while (1) {
int v = readnchar(len);
if (v == (1<<len) - 1)
break;
result += code[len][v];
}
}
cout << result << endl;
result.clear();
while (getchar() != '\n')
continue;
}
return 0;
}
int readchar() {
int ch;
while (1) {
if ((ch = getchar()) != '\n')
return ch;
}
}
int readnchar(int c) {
int value = 0;
while (c--)
value = value * 2 + readchar() - '0';
return value;
}
int readcodes() {
memset(code, 0, sizeof(code));
for (int len = 1; len <= 7; len++)
for (int i = 0; i < (1<<len)-1; i++) {
int ch = getchar();
if (ch == EOF)
return 0;
if (ch == '\n')
return 1;
code[len][i] = ch;
}
return 1;
}