View Code of Problem 3806

    #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];
    string key;
    string mm;
    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();
			getline(cin,key);
			getline(cin,mm);
			for(int i=0;i<key.size();i++)
                x[s[i]]=key[i];
            len=0;
            int i=0;
			while(i<mm.size())
            {
                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.


Back to problem 3806