点击打开链接(题目地址)。
题意:给你一个字符串是编码头,在给你一个二进制字符串。你要根据编码头来确定字符所对应的二进制,从而解析输入的二进制。
思路:模拟,关键是二进制也字符的映射(你可以发现二进制的编码和二进制一一对应,也和输入字符的编码一一对应)。
#include<bits/stdc++.h> using namespace std; int readerchar(){ for(;;){ int ch=getchar(); if(ch!='\n'&&ch!='\r') return ch; } } int readint(int c){//将读入的二进制转为十进制。 int v=0; for(int i=1;i<=c;i++){ v=v*2+readerchar()-'0'; } return v; } int code[8][1<<8]; int readcodes(){//读入编码头。 memset(code,0,sizeof(code)); code[1][0]=readerchar(); for(int len=2;len<=7;len++){ for(int i=0;i<(1<<len)-1;i++){ int ch=getchar(); if(ch==EOF) return 0; if(ch=='\n'||ch=='\r') return 1; code[len][i]=ch; } } } int main(){ //freopen("data.in","r",stdin); while(readcodes()){ for(;;){ int len=readint(3); if(len==0) break; for(;;){ int v=readint(len); if(v==(1<<len)-1) break; putchar(code[len][v]); } } putchar('\n'); } return 0; }