题解 | #数据分类处理#
数据分类处理
https://www.nowcoder.com/practice/9a763ed59c7243bd8ab706b2da52b7fd
#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] << " ";
}
}

