题解 | #数据分类处理#暴力遍历
数据分类处理
https://www.nowcoder.com/practice/9a763ed59c7243bd8ab706b2da52b7fd
#include <iostream> #include <vector> #include <set> #include <algorithm> #include <bits/stdc++.h> using namespace std; // 获取I(i)中所有可能的数字 vector<int> getNum(int a) { string str = to_string(a); unordered_set<int> s1; int len = str.size(); for(int i=0; i<len; ++i) { string cur; for(int j=i; j<len; ++j) { cur += str[j]; if(!cur.empty()) s1.insert(stoi(cur)); } } return vector<int>(s1.begin(), s1.end()); } int main() { int ni, nr; cin >> ni; vector<int> I(ni,0); for(int i=0; i<ni; ++i) { cin >> I[i]; } cin >> nr; vector<int> R(nr,0); for(int i=0; i<nr; ++i) { cin >> R[i]; } sort(R.begin(), R.end()); map<int, vector<int>> m1; for(int i=ni-1; i>=0; --i) { m1[i] = getNum(I[i]); } int count = 0; vector<vector<pair<int,int>>> final_ans; vector<int> new_R; for(int i=0; i<nr; ++i) { vector<pair<int,int>> ans; if(i>0 && R[i] == R[i-1]) continue; for(auto it=m1.begin(); it!=m1.end(); ++it) { vector<int> nums = it->second; for(int j=0; j<nums.size(); ++j) { if(nums[j] == R[i]) { ans.push_back({I[it->first], it->first}); ++ count; break; } } } if(!ans.empty()) { final_ans.push_back(ans); new_R.push_back(R[i]); } } // 输出 count = count*2 + new_R.size()*2; cout << count; if(count != 0) cout << " "; for(int i=0; i<new_R.size(); ++i) { cout << new_R[i] << " "; cout << final_ans[i].size() << " "; int fsize = final_ans[i].size(); for(int j=0; j<fsize; ++j) { cout << final_ans[i][j].second << " " << final_ans[i][j].first; if(i == new_R.size()-1 && j == fsize-1) continue; else cout << " "; } } return 0; }