图书管理员

1.2k 词

题目描述

图书馆中每本书都有一个图书编码,可以用于快速检索图书,这个图书编码是一个英文字符串。 每位借书的读者手中有一个需求码,这个需求码也是一个英文字符串。如果一本书的图书编码恰好以读者的需求码结尾,那么这本书就是这位读者所需要的。 小L刚刚当上图书馆的管理员,他知道图书馆里所有书的图书编码,请你帮他写一个程序,对于每一位读者,求出他所需要的书中图书编码最小(按字典序比较)的那本书,如果没有他需要的书,请输出−1−1。

输入

多组输入 输入的第一行,包含两个正整数 nn 和 qq,以一个空格分开,分别代表图书馆里书的数量和读者的数量。 接下来的 nn 行,每行包含一个英文字符串,代表图书馆里某本书的图书编码。 接下来的 qq 行,每行包含一个整数mm和一个英文字符串tt,以一个空格分开,第一个正整数mm代表图书馆里读者的需求码的长度,第二个字符串代表读者的需求码。

输出

输出有 q 行,如果存在第 i 个读者所需要的书,则在第 i 行输出第 i 个读者所需要的书中图书编码最小的那本书的图书编码,否则输出-1。

样例输入

1
2
3
4
5
6
7
8
9
10
11
5 5
zbhefr
abhefr
engfds
adffds
adsfgr
3 efr
1 r
2 ds
4 ffdg
2 qr

样例输出

1
2
3
4
5
abhefr
abhefr
adffds
-1
-1

题解

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#include<bits/stdc++.h>
using namespace std;
using ll = long long;
#define endl '\n'

int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
int n, q;
string a("hello");
assert(a.substr(3, 5) == "lo");
while (cin >> n >> q) {
vector<string> s(n);
for (auto &e:s)cin >> e;
sort(s.begin(), s.end());
while (q--) {
int m;
string t;
cin >> m >> t;
bool flag = false;
for (int i = 0; i < n; i++) {
if (s[i].substr(s[i].size() - m) == t) {
flag = true;
cout << s[i] << endl;
break;
}
}
if (!flag) {
cout << -1 << endl;
}
}
}
return 0;
}