果不其然,又是字符串操作题。
首先,我们很容易想到用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; }