You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
|
|
#include <bits/stdc++.h>
|
|
|
|
|
|
|
|
|
|
//阅读材料:https://blog.csdn.net/mrcrack/article/details/52122765
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* C语言中1<<i表示将1的二进制每位想左移动i位,末位补0。
|
|
|
|
|
左移运算符(<<)是C语言中的一种常见的运算符,一般用法可以通过下面的例子讲解来说明:
|
|
|
|
|
如:1<<5 由于1的二进制为0000 0001,左移5位就是将每位向左移动5位,末位补0,所以1<<5后结果为0010 0000,转换为十进制就是32。
|
|
|
|
|
*/
|
|
|
|
|
char codes[8][1 << 8];
|
|
|
|
|
//1左移8位,表示100000000-->二进制->转十进制--> 256 这挺会玩啊~这么做也对,因为既然要把这道题考虑成二进制,
|
|
|
|
|
// 那么出现的组合个数按左移N位来思考,也是正常的
|
|
|
|
|
|
|
|
|
|
//读取一个有用字符,小函数,辅助函数
|
|
|
|
|
int readchar() {
|
|
|
|
|
char ch;
|
|
|
|
|
while (true) {
|
|
|
|
|
//读啊读~回车换行符不要,
|
|
|
|
|
ch = getchar();
|
|
|
|
|
if (ch != '\r' && ch != '\n')
|
|
|
|
|
return ch;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//读取代码
|
|
|
|
|
int readcodes() {
|
|
|
|
|
int len;
|
|
|
|
|
int i;
|
|
|
|
|
char ch;
|
|
|
|
|
//清空codes数组,初始化为0
|
|
|
|
|
memset(codes, 0, sizeof(codes));
|
|
|
|
|
//读入第一个非换行的字符
|
|
|
|
|
codes[1][0] = readchar();
|
|
|
|
|
|
|
|
|
|
//从第2个开始,使用getchar进行读取
|
|
|
|
|
for (len = 2; len <= 7; len++) //7是极限,表示不会超过7位二进制
|
|
|
|
|
//第一轮次,读取字符
|
|
|
|
|
for (i = 0; i < (1 << len) - 1; i++) {
|
|
|
|
|
ch = getchar();
|
|
|
|
|
//结束就不用继续了~
|
|
|
|
|
if (ch == EOF)
|
|
|
|
|
return 0;
|
|
|
|
|
//如果是换行符,就继续下一轮
|
|
|
|
|
if (ch == '\n')
|
|
|
|
|
return 1;
|
|
|
|
|
//读取到指定位置
|
|
|
|
|
codes[len][i] = ch;
|
|
|
|
|
}
|
|
|
|
|
return 1;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//读取二进制数字,转为十进制数,比如读取c=3个长度,封装成十进制数
|
|
|
|
|
int readint(int c) {
|
|
|
|
|
int v = 0;
|
|
|
|
|
while (c--) {
|
|
|
|
|
v = v * 2 + readchar() - '0';
|
|
|
|
|
}
|
|
|
|
|
return v;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
int main() {
|
|
|
|
|
int len;
|
|
|
|
|
int i;
|
|
|
|
|
//读取代码,不断的读取测试用例
|
|
|
|
|
while (readcodes()) {
|
|
|
|
|
//在一个用例中开始进行分析
|
|
|
|
|
while (true) {
|
|
|
|
|
len = readint(3);
|
|
|
|
|
if (len == 0)
|
|
|
|
|
break;
|
|
|
|
|
while (true) {
|
|
|
|
|
i = readint(len);
|
|
|
|
|
if (i == (1 << len) - 1)
|
|
|
|
|
break;
|
|
|
|
|
putchar(codes[len][i]);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
putchar('\n');
|
|
|
|
|
}
|
|
|
|
|
return 0;
|
|
|
|
|
}
|