#include <bits/stdc++.h> using namespace std; int main() { int i; int r; cin >> i; int I[i]; //用于接收I序列 for(int j = 0; j < i; ++j) { cin >> I[j]; } cin >> r; int R[r]; //用于接收R序列 set<int> s; //利用set按照key值大小有序排列,免去手动去重工作 map<int, vector<int>> m; //m中的元素和s中的元素一一对应,并且m中会记录I序列中符合条件的元素,使用vector进行记录。 for(int j = 0; j < r; ++j) { cin >> R[j]; s.insert(R[j]); } for(auto it = s.begin(); it != s.end(); ++it) { vector<int> vec; // m[*it] = vec; for(int j = 0; j < i; ++j) { //此处循环遍历I序列中是否存在R<i> if(to_string(I[j]).find(to_string(*it)) != string::npos) { m[*it].push_back(j);//如果满足条件,则把满足条件的下标插入m中。 } } } vector<int> res; //用于记录输出 for(auto it = s.begin(); it != s.end(); ++it) { if(m[*it].empty()) continue; else { res.push_back(*it);//符合元素的i res.push_back(m[*it].size());//符合R<i>的个数 for(int j = 0; j < m[*it].size(); ++j) { res.push_back(m[*it][j]); //R<i>的下标 res.push_back(I[m[*it][j]]); //根据R<i>下标找出该元素 } } } cout << res.size() << " "; for(int j = 0; j < res.size(); ++j) { cout << res[j] << " "; } }