题解 | #数据分类处理#
数据分类处理
https://www.nowcoder.com/practice/9a763ed59c7243bd8ab706b2da52b7fd
#include <iostream> #include <string> #include <vector> #include <set> using namespace std; // I是否包含R? bool isInclude(int I, int R) { string si = to_string(I); string sr = to_string(R); int leni = si.length(); int lenr = sr.length(); for(int i=0; i<leni-lenr+1; ++i) { if(sr.compare(si.substr(i, lenr)) == 0) return true; } return false; } int main() { int n; cin >> n; vector<int> I(n); for(int i=0; i<n; ++i) cin >> I[i]; cin >> n; set<int> R; for(int i=0; i<n; ++i) { int a; cin>> a; R.insert(a); } vector<vector<int>> result; // I中不同元素对应结果存储在不同vector中 vector<int> rR; // 需要输出的R int num = 0; // 输出的整数个数 for(int r : R) { // map<int, int> RIm; // 当前R对应的 vector<int> ri; for(int i=0; i<I.size(); ++i) { if(isInclude(I[i], r)) ri.push_back(i); } if(!ri.empty()) { result.push_back(ri); rR.push_back(r); num += 2 * (int)ri.size() + 2; // I元素+序号+R元素 } } // 输出 vector<int> output; output.push_back(num); for(int i=0; i<rR.size(); ++i) { output.push_back(rR[i]); output.push_back(result[i].size()); for(int a : result[i]) { output.push_back(a); output.push_back(I[a]); } } for(int i=0; i<output.size(); ++i) { if(i < output.size() - 1) cout << output[i] << " "; else cout << output[i]; } return 0; } // 64 位输出请用 printf("%lld")