PAT 1052 卖个萌
#include<iostream>
#include<vector>
#include<list>
#include<stack>
using namespace std;
int main()
{
string hand,eye,mouth;
getline(cin,hand); getline(cin,eye); getline(cin,mouth);
stack<char> HAND,EYE,MOUTH;
auto stos=[=](string str,stack<char>& STACK){for(int i=str.length()-1;i>=0;--i)STACK.push(str[i]);};
auto trfo=[](stack<char>& Stack,list<string>& lst){string aim; char symbol;
while(!Stack.empty())
{
symbol=Stack.top();
if(symbol=='[')
{//匹配
Stack.pop(),symbol=Stack.top();
while(!Stack.empty()&&symbol!=']'){
aim.push_back(symbol);
Stack.pop(),symbol=Stack.top();
}
lst.emplace_back(aim),aim.clear();
}
if(!Stack.empty()) Stack.pop();
}
};
stos(hand,HAND),stos(eye,EYE),stos(mouth,MOUTH);
list<string> _hand,_eye,_mouth;
trfo(HAND,_hand),trfo(EYE,_eye),trfo(MOUTH,_mouth);
int times,i{}; cin>>times;
vector<vector<int>> vec(times,vector<int>(5));
while(times--){
for(int j{};j<5;++j) cin>>vec[i][j];
i++;
}
list<string>::iterator iter;
for(int i{};i<vec.size();++i)
if(vec[i][0]<1||vec[i][2]<1||vec[i][3]<1||vec[i][4]<1||vec[i][0]>_hand.size()||vec[i][1]>_eye.size()||vec[i][2]>_mouth.size()||vec[i][3]>_eye.size()||vec[i][4]>_hand.size())
cout<<"Are you kidding me? @\\/@"<<endl;
else
{//[左手]([左眼][口][右眼])[右手]
iter=_hand.begin();
advance(iter,vec[i][0]-1); cout<<*iter<<'(';
iter=_eye.begin();
advance(iter,vec[i][1]-1); cout<<*iter;
iter=_mouth.begin();
advance(iter,vec[i][2]-1); cout<<*iter;
iter=_eye.begin();
advance(iter,vec[i][3]-1); cout<<*iter<<')';
iter=_hand.begin();
advance(iter,vec[i][4]-1); cout<<*iter<<'\n';
}
}