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];
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.


Back to problem 3806