1、一个模拟题,背景是莫尔斯电码,仔细一点就行了。
#include<cstdio>
#include<map>
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
map<char,string> a;
map<string,char> b;
map<char,int> c;
char s[1010],s1[4040];
int d[1010];
int main(){
string A(".-");
a['A']=A;b[A]='A';c['A']=2;
string B("-...");
a['B']=B;b[B]='B';c['B']=4;
string C("-.-.");
a['C']=C;b[C]='C';c['C']=4;
string D("-..");
a['D']=D;b[D]='D';c['D']=3;
string E(".");
a['E']=E;b[E]='E';c['E']=1;
string F("..-.");
a['F']=F;b[F]='F';c['F']=4;
string G("--.");
a['G']=G;b[G]='G';c['G']=3;
string H("....");
a['H']=H;b[H]='H';c['H']=4;
string I("..");
a['I']=I;b[I]='I';c['I']=2;
string J(".---");
a['J']=J;b[J]='J';c['J']=4;
string K("-.-");
a['K']=K;b[K]='K';c['K']=3;
string L(".-..");
a['L']=L;b[L]='L';c['L']=4;
string M("--");
a['M']=M;b[M]='M';c['M']=2;
string N("-.");
a['N']=N;b[N]='N';c['N']=2;
string O("---");
a['O']=O;b[O]='O';c['O']=3;
string P(".--.");
a['P']=P;b[P]='P';c['P']=4;
string Q("--.-");
a['Q']=Q;b[Q]='Q';c['Q']=4;
string R(".-.");
a['R']=R;b[R]='R';c['R']=3;
string S("...");
a['S']=S;b[S]='S';c['S']=3;
string T("-");
a['T']=T;b[T]='T';c['T']=1;
string U("..-");
a['U']=U;b[U]='U';c['U']=3;
string V("...-");
a['V']=V;b[V]='V';c['V']=4;
string W(".--");
a['W']=W;b[W]='W';c['W']=3;
string X("-..-");
a['X']=X;b[X]='X';c['X']=4;
string Y("-.--");
a['Y']=Y;b[Y]='Y';c['Y']=4;
string Z("--..");
a['Z']=Z;b[Z]='Z';c['Z']=4;
string under("..--");
a['_']=under;b[under]='_';c['_']=4;
string period("---.");
a['.']=period;b[period]='.';c['.']=4;
string comma(".-.-");
a[',']=comma;b[comma]=',';c[',']=4;
string ques("----");
a['?']=ques;b[ques]='?';c['?']=4;
while(scanf("%s",s)==1){
int len=strlen(s);
string ns;
for(int i=0;i<len;i++){
string temp=a[s[i]];
ns+=temp;
d[i]=c[s[i]];
}
for(int i=0;i<len/2;i++)
swap(d[i],d[len-1-i]);
int p=0;
string NS[1010];
for(int i=0;i<len;i++){
for(int j=0;j<d[i];j++)
NS[i]+=ns[p+j];
p+=d[i];
cout<<b[NS[i]];
}
cout<<endl;
}
return 0;
}