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