練習.....1


説明
AliceとBobは他にも何人かの親友と一緒に伝言ゲームをしています.このゲームは、まず、すべてのプレイヤーが順番に1列に並んで、Alice駅が1位、Bob駅が最後になります.そして、Aliceは一言で2番目のプレイヤーに、2番目のプレイヤーは3番目に、3番目に4番目に...とこっそり伝えたいと思っていました.二人の遊戯者は伝言の中で、他の人に聞かれてはいけないし、肢体の動作を使って説明することもできない.最後に、Bobは彼が聞いたことをみんなに話し、Aliceも彼女が思っていたことをみんなに話した.
伝言の過程でいくつかの偏差が現れる可能性があるため、ゲーム者が多ければ多いほど、Bobが最後に聞いた話はAliceの考えとは異なる.ボブは聞くと面白いものになることが多いので、みんな楽しんでいます.数回のゲームを経て、Aliceは二人の伝言の中で、いくつかの語彙が誤って他の特定の語彙になることに気づいた.Aliceはこのような語彙変換のリストを集めました.彼女の話がBobに伝わったときどうなるか知りたいので、プログラムを書いて助けてください.
入力
入力には複数のデータが含まれます.最初の行は整数Tであり、テストデータのセットがいくつあるかを示します.各データの第1行は、2つの整数NおよびMを含み、それぞれ、ゲーム者の数および単語変換リストの長さを表す.次にM行があり、各行にはスペースで区切られた2つの単語aとbが含まれており、単語aが伝言中に必ずbになることを示している.入力データは、重複するaがないことを保証する.最後の行には、Aliceが考えている文を表す単一のスペースで区切られたいくつかの単語が含まれています.文の総長は100文字を超えません.すべての単語は小文字のみを含み、長さは20を超えず、同じ単語の異なる時態は異なる単語とされている.リストにない単語は永遠に変わらないと仮定できます.1≦T≦100ビッグデータ:2≦N≦10,0≦M≦10ビッグデータ:2≦N≦100,0≦M≦100
しゅつりょく
テストデータのセットごとに、「Case#c:s」の行を個別に出力します.ここで,cはテストデータ番号,sはBobが聞いた文である.sのフォーマットは入力データのAliceが考える文のフォーマットと同じである.
サンプル入力
2
4 3
ship sheep
sinking thinking
thinking sinking
the ship is sinking
10 5
tidy tiny
tiger liar
tired tire
tire bear
liar bear
a tidy tiger is tired

サンプル出力
Case #1: the sheep is thinking
Case #2: a tiny bear is bear

int testtimes=0;//     
	int times=0;//    
	int words=0;//        
	int line=0;
	cin>>testtimes;
	hash_map<string,char*> amap;
	hash_map<string,char*> bmap;
	for(int i=0;i<testtimes;i++){	
	char *p=(char*)malloc(sizeof(char)*2000);
	char *q=(char*)malloc(sizeof(char)*2000);
	line=0;
	
	cin>>times>>words;
	times--;
	while(cin>>p>>q){
		amap.insert(pair<string,char*>(p,q));
		bmap.insert(pair<string,char*>(q,p));
		p+=20;
		q+=20;
		line++;
		if(line==words)break;
	}
	line=0;
	vector<char*> wordinS(50);
	char sentence[100];
	cin.get();
	cin.getline(sentence,100);
	int site=0;
	for(int j=0;j<100;j++){
		if(sentence[j]==' '){
			sentence[j++]='\0';		
			wordinS[line++]=&sentence[site];
			site=j;
		}else if(sentence[j]=='\0'){
			sentence[j++]='\0';		
			wordinS[line++]=&sentence[site];
			break;
		}

	}
	for(int j=0;j<times;j++){
		for(int k=0;k<line;k++){
			if(amap.count( wordinS[k])){
				wordinS[k]=amap.find(wordinS[k])->second;
			}else if(bmap.count(wordinS[k])){
				wordinS[k]=bmap.find(wordinS[k])->second;
			}

		}
	}
	amap.clear();
	bmap.clear();
	cout<<"Case #"<<i+1<<": ";
	for(int j=0;j<line;j++){
		cout<<wordinS[j]<<' ';
	}
	
	cout<<endl;
	}

正確な結果を出力できるのに、ああ、補うものがたくさんあります.