果不其然,又是字符串操作题。

首先,我们很容易想到用struct来存每个妹子的信息。

那么根据题意,我们就需要定义这样一个结构体:

struct node{
    string nm;//妹子的名字
    ll rk;//妹子的评分
    int x;//输入顺序
};

题目中问法有些有趣:询问名字以某个字母结尾的妹子

所以我们就可以定义一个数组,表示结尾字符为,排名第的妹子。

所以再加上排序函数,整个程序就写好了。

不过,有一个问题:内存超了。

那怎么办?我们有万能的

再加上这玩意有自带的排序函数,然后就写完了。

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define f(i,a,b) for(int i=a;i<=b;i++)
inline ll r() {
    ll x=0,f=1;
    char c=getchar();
    while(!isdigit(c)){if(c=='-')f=-1;c=getchar();}
    while(isdigit(c))x=x*10+c-'0',c=getchar();
    return x*f;
}
#define d r()
struct node{
    string nm;
    ll rk;
    int x;
};
vector<node> g[26];
ll tmp[26];
bool cmp(node a,node b){
    if(a.rk!=b.rk)return a.rk>b.rk;
    else return a.x<b.x;
}
ll n,k;
int main(){
    n=d,k=d;
    f(i,1,n){
        string s;
        cin>>s;
        g[s[s.size()-1]-'a'].push_back({s,d,i});
    }
    f(i,0,25)sort(g[i].begin(),g[i].end(),cmp);
    while(k--){
        char c;
        ll now;
        cin>>c;
        now=d;
        if(now>g[c-'a'].size())cout<<"Orz YYR tql\n";
        else cout<<g[c-'a'][now-1].nm<<endl;
    }
    return 0;
}