题目描述

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

输入

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

输出

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

样例输入

5 5
zbhefr
abhefr
engfds
adffds
adsfgr
3 efr
1 r
2 ds
4 ffdg
2 qr

样例输出

abhefr
abhefr
adffds
-1
-1

题解

#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;
}