对读入的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")



京公网安备 11010502036488号