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;
}
}