天天看點

b1052 賣個萌 (20 分)

萌萌哒表情符号通常由“手”、“眼”、“口”三個主要部分組成。簡單起見,我們假設一個表情符号是按下列格式輸出的:

[左手]([左眼][口][右眼])[右手]
           

現給出可選用的符号集合,請你按使用者的要求輸出表情。

輸入格式:

輸入首先在前三行順序對應給出手、眼、口的可選符号集。每個符号括在一對方括号 

[]

内。題目保證每個集合都至少有一個符号,并不超過 10 個符号;每個符号包含 1 到 4 個非空字元。

之後一行給出一個正整數 K,為使用者請求的個數。随後 K 行,每行給出一個使用者的符号選擇,順序為左手、左眼、口、右眼、右手——這裡隻給出符号在相應集合中的序号(從 1 開始),數字間以空格分隔。

輸出格式:

對每個使用者請求,在一行中輸出生成的表情。若使用者選擇的序号不存在,則輸出 

Are you kidding me? @\/@

輸入樣例:

[╮][╭][o][~\][/~]  [<][>]
 [╯][╰][^][-][=][>][<][@][⊙]
[Д][▽][_][ε][^]  ...
4
1 1 2 2 2
6 8 1 5 5
3 3 4 3 3
2 10 3 9 3
           

輸出樣例:

╮(╯▽╰)╭
<(@Д=)/~
o(^ε^)o
Are you kidding me? @\/@
           

注意點:

1.使用dev-c++時好幾個特殊符号輸入之後都沒有顯示,但在pat網站上就可以正常顯示,懷疑是特殊符号不是acs碼編譯器不顯示的問題,這裡不用太糾結。

2.輸入第四行可能為負數或0,記得判斷下限,可能導緻測試點2的運作時錯誤。

ac代碼:

#include<iostream>
#include<vector>
#include<map>
using namespace std;
map<int,int> mp;
int setM(){
	mp[0]=0;
	mp[1]=1;
	mp[2]=2;
	mp[3]=1;
	mp[4]=0;
}
int main() {
	int n,j;
	setM();
	string s,s1;
	vector<string> v[3];
	//輸入
	for(int m=0; m<3; m++) {
		getline(cin,s);
		for(int i=0; i<s.length(); i++) {
			if(s[i]=='[') {
				s1="";
				for(j=i+1; j<s.length(); j++) {
					if(s[j]==']') {
						break;
					}
					s1+=s[j];
				}
				v[m].push_back(s1);
				i=j;
			}
		}
	}
	scanf("%d",&n);
	while(n--) {
		s1="";
		for(int m=0; m<5; m++) {
			scanf("%d",&j);
			if(j>v[mp[m]].size()||j<1) {
				s1="Are you kidding me? @\\/@";
				break;
			}
			s1+=v[mp[m]][j-1];
			if(!m){
				s1+="(";
			}
			if(m==3){
				s1+=")";
			}
		}
		cout<<s1<<endl;
	}
}