#include <cstdio> #include <iostream> #include <cstring> #include <string> #include <fstream> #include <algorithm> #include <ctime> #include <map> using namespace std; #define MAX(a,b) (a)>(b)?(a):(b) #define INF 0x3f3f3f3f #define MAXN 100010 typedef long long ll; const int mod=1000000009; string s[27]; char key[30]; char mm[10010]; int len=0; char ans[10010]; map<string,char> x; string check[10]; void init() { s[0]=string("0"); s[1]=string("00"); s[2]=string("01"); s[3]=string("10"); s[4]=string("000"); s[5]=string("001"); s[6]=string("010"); s[7]=string("011"); s[8]=string("100"); s[9]=string("101"); s[10]=string("110"); s[11]=string("0000"); s[12]=string("0001"); s[13]=string("0010"); s[14]=string("0011"); s[15]=string("0100"); s[16]=string("0101"); s[17]=string("0110"); s[18]=string("0111"); s[19]=string("1000"); s[20]=string("1001"); s[21]=string("1010"); s[22]=string("1011"); s[23]=string("1100"); s[24]=string("1101"); s[25]=string("1110"); s[26]=string("00000"); s[27]=string("00001"); string tmp("1"); for(int i=1;i<9;i++) { check[i]=tmp; tmp+=string("1"); } } int main() { init(); int t; scanf("%d",&t); getchar(); while(t--) { x.clear(); gets(key); gets(mm); for(int i=0;i<strlen(key);i++) x[s[i]]=key[i]; len=0; int i=0; while(i<strlen(mm)) { int num=0; num+=(mm[i++]-'0')*4; num+=(mm[i++]-'0')*2; num+=(mm[i++]-'0')*1; if(!num) continue; string tmp; for(int j=0;j<num;j++,i++) { tmp.push_back(mm[i]); } while(tmp!=check[num]) { if(x.count(tmp)) ans[len++]=x[tmp]; tmp.clear(); for(int j=0;j<num;j++,i++) tmp.push_back(mm[i]); } } ans[len]=0; puts(ans); } return 0; } |
Double click to view unformatted code.