题解 | #数据分类处理#
数据分类处理
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;
}
查看22道真题和解析