传送门
一道令人心碎的模拟题。
题目主要是学习输入的技巧。
1.用int输入char。(tql)
2.readcode函数的奇妙返回值。
首先推出对于长度为n的串,有2的n次方-1种情况。(因为全为1不行)
然后,看看代码吧。(憔悴)
#include<cstdio>
#include<cstring>
int ans[10][(1 << 10) - 1];
int readchar() {
int ch;
while(1) {
ch = getchar();
if(ch != '\n' && ch != '\t')
return ch;
}
}
int readint(const int len) {
int res = 0;
for(int i = len - 1; i >= 0; i --) {
int tmp = readchar();
res += (tmp - '0') * (1 << i);
}
return res;
}
bool readcode() {
int ch;
memset(ans, 0, sizeof(ans));
for(int i = 1; i <= 7; i ++) {
for(int j = 0; j < (1 << i) - 1; j ++) {//A
ch = getchar();
if(ch == EOF)
return 0;
if(ch == '\n' || ch == '\t')
return 1;
ans[i][j] = ch;
}
}
return 1;
}
int main() {
int len, p, tot;
while(readcode()) {
while(1) {
len = 0;
len = readint(3);
if(len == 0)
break;
while(1) {
p = readint(len);
if(p == (1 << len) - 1)
break;
putchar(ans[len][p]);
}
}
tot = getchar();
if(tot == EOF)
break;
printf("\n");
}
return 0;
}
注:
A:从0开始,且本就要-1。
B:不要复制luogu数据!不要复制luogu数据!不要复制luogu数据!这东西坑了lz一个小时!!!!!