题解 | #数据分类处理#
数据分类处理
https://www.nowcoder.com/practice/9a763ed59c7243bd8ab706b2da52b7fd
#include <iostream> #include <vector> #include <set> #include <algorithm> #include <string> #include <iterator> using namespace std; //用于记录每次遍历vec_I的情况 //每次的情况需要分开存储 int rec(string s,vector<string> vec,vector<string>& v){ int flag = 0;//标记是第几次出现相同 for(int i=0; i<vec.size(); i++){ //不是vec[i].find(),是find() int pos = vec[i].find(s); if(pos != vec[i].npos){ //找到了,记录下来 flag++; v.push_back(to_string(i)); v.push_back(vec[i]); } else{ continue; } } return flag; } int main() { int n_I , n_R; vector<string> vec_I; set<int> set_R; cin >> n_I; while(n_I--){ string si; cin >> si; vec_I.push_back(si); } cin >> n_R; while(n_R--){ //如果sr是string类型的话,就不能正确排序 int sr; cin >> sr; set_R.insert(sr); } //从vec_I中找包含了set_R中内容的元素,输出 //遍历set_R中元素,找有没有重合的,没有跳过 vector<string> res; for(auto it=set_R.begin(); it != set_R.end(); it++){ vector<string> v; string temp = to_string(*it); int flag = rec(temp,vec_I,v);//返回有几个重合的元素 //再将结果放入最终的vector中 if(flag == 0){ continue; } res.push_back(temp); res.push_back(to_string(flag)); for(int j=0; j<v.size(); j++){ res.push_back(v[j]); } } cout << res.size() << ' '; for(int k=0;k<res.size();k++){ cout << res[k] << ' '; } return 0; }