http://acm.pku.edu.cn/JudgeOnline/problem?id=1051

Код:
#include <iostream>
#include <string>

using namespace std;

int main()
{
	int N;
	int i,j,k,l,Tlen=0,thiscode;
	int Tcode[5000];
	int RTcode[5000];
	int len[1000]={0};
	int code[100]={0};
	int decode[10000];
	char msg[1000];
	code[65]=12;
	code[66]=2111;
	code[67]=2121;
	code[68]=211;
	code[69]=1;
	code[70]=1121;
	code[71]=221;
	code[72]=1111;
	code[73]=11;
	code[74]=1222;
	code[75]=212;
	code[76]=1211;
	code[77]=22;
	code[78]=21;
	code[79]=222;
	code[80]=1221;
	code[81]=2212;
	code[82]=121;
	code[83]=111;
	code[84]=2;
	code[85]=112;
	code[86]=1112;
	code[87]=122;
	code[88]=2112;
	code[89]=2122;
	code[90]=2211;
	code[95]=1122;
	code[44]=1212;
	code[46]=2221;
	code[63]=2222;
	for(i=0;i<100;i++)
decode[code[i]]=i;
	cin >> N;
	for(i=0;i<N;i++){
cin >> msg;
cout << i+1 << ": ";
l=strlen(msg);
Tlen=0;
for(j=0;j<1000;j++)
	len[j]=0;
for(j=l-1;j>-1;j--){
	thiscode=code[(int)msg[j]];
	while(thiscode!=0){
Tcode[Tlen]=thiscode%10;
Tlen++;
len[j]++;
thiscode/=10;
	}
}
for(j=0;j<Tlen;j++)
	RTcode[j]=Tcode[Tlen-j-1];
Tlen=0;
for(j=0;j<l;j++){
	thiscode=0;
	for(k=0;k<len[l-j-1];k++){
thiscode+=RTcode[Tlen];
thiscode*=10;
Tlen++;
	}
	thiscode/=10;
	cout << (char)decode[thiscode];
}
cout << endl;
	}
}