演算法學習之路|賣個萌

kissjz發表於2018-02-28

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

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

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

輸入格式

輸入首先在前三行順序對應給出手、眼、口的可選符號集。每個符號括在一對方括號[]內。題目保證每個集合都至少有一個符號,並不超過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? @/@

我的思路

利用scanf格式化存入這些符號。

然後根據給的資料,判斷是否可以成為一個臉,即可。

程式碼如下(有個別沒有AC):

#include<iostream>
#include<stdio.h>
#include<string>
#include<vector>
using namespace std;
int main(){
    string a;
    vector<string> face[3];//0:手,1:眼,2:口
    for(int j=0;j<3;j++){
        getline(cin,a);
        //cout<<a<<endl;
        for(int l=0,r=0,i=0;;i++,l++,r++){
            while (a[r]!=`]`){
                r++;
                if(r>=a.size())
                    break;
                
            }
            if(r>=a.size())
                break;
            while(a[l]!=`[`){
                l++;
            }
            face[j].push_back(a.substr(l+1,r-l-1));
        }
    }
    
//    for(int j=0;j<3;j++){
//        for(auto a:face[j])
//            cout<<a<<" ";
//        cout<<face[j].size()<<endl;
//    }
    
    int n;
    cin>>n;
    for(int i=0;i<n;i++){
        int tmp[5];
        for(int j=0;j<5;j++){
            cin>>tmp[j];
        }
        if(tmp[0]>face[0].size()||tmp[4]>face[0].size()||tmp[1]>face[1].size()||
           tmp[3]>face[1].size()||tmp[2]>face[2].size()){
            cout<<"Are you kidding me? @\/@"<<endl;
            continue;
        }
        cout<<face[0][tmp[0]-1]<<"(";
        cout<<face[1][tmp[1]-1];
        cout<<face[2][tmp[2]-1];
        cout<<face[1][tmp[3]-1]<<")";
        cout<<face[0][tmp[4]-1];
        cout<<endl;
    }
    
}


相關文章