对读入的R进行排序和去重,然后遍历每个R中的元素,使用find函数判断相应的I中的元素是否满足条件,使用合适的数据结构按顺序保存数据,最后按照格式输出即可。

#include <iostream>
#include <vector>
#include <algorithm>
#include <map>
using namespace std;

int main() {
    int I, R;
    string num;
    vector<string> nums;
    vector<int> nums_r;
    int number;
    cin >> I;
    for (int i = 0; i < I; i++) {
        cin >> num;
        nums.push_back(num);
    }
    cin >> R;
    for (int i = 0; i < R; i++) {
        cin >> number;
        nums_r.push_back(number);
    }
    sort(nums_r.begin(), nums_r.end());
    auto last = unique(nums_r.begin(), nums_r.end());
    nums_r.erase(last, nums_r.end());
    vector<vector<string>> data;
    vector<string> sequence;
    for (vector<int>::iterator it = nums_r.begin(); it != nums_r.end(); it++) {
        vector<string> temp;
        for (int i = 0; i < nums.size(); i++) {
            if (nums.at(i).find(to_string(*it)) != string::npos) {
                temp.push_back(to_string(i));
                temp.push_back(nums.at(i));
            }
        }
        if (temp.size() != 0) {
            sequence.push_back(to_string(*it));
            data.push_back({temp});
        }
    }
    int n = data.size() * 2;
    for (vector<string> element : data) {
        n += element.size();
    }
    cout << n << ' ';
    for (int i = 0; i < sequence.size(); i++) {
        cout << sequence.at(i) << ' ' << data.at(i).size() / 2 << ' ';
        for (string num : data.at(i)) {
            cout << num << ' ';
        }
    }
    return 0;
}
// 64 位输出请用 printf("%lld")