题解 | #数据分类处理#
数据分类处理
https://www.nowcoder.com/practice/9a763ed59c7243bd8ab706b2da52b7fd
#include <iostream> #include <vector> #include <string> #include <set> #include <unordered_map> using namespace std; int main() { int N;//I序列个数 vector<string> vec_I; vector<string> vec_R; set<int> set_R; vector<int> result;//存放输出结果 while (cin >> N) { // 注意 while 处理多个 case int num_I; for(int i=0;i<N;i++){ cin>> num_I; vec_I.push_back(to_string(num_I)); } int n;//R序列个数 cin>>n; int num_R; for(int j=0;j<n;j++){ cin>>num_R; //vec_R.push_back(to_string(num_R)); set_R.insert(num_R);//升序且去重 //set_R.insert(to_string(num_R));把字符串直接放到容器中排序会有问题 16 4 26会按照字符串顺序排成16 26 4 } for(auto it1=set_R.begin();it1!=set_R.end();it1++){ vec_R.push_back(to_string(*it1)); } for(auto it_R=vec_R.begin();it_R!=vec_R.end();it_R++){ result.push_back(stoi(*it_R));//下面需要判断有没有满足条件的I int flag_have=0;//I满足条件标志位 int cout=0;//记录序列I中满足每个R<i>条件的个数 //第一遍:判断R<i>是否有效 ,记录I序列中满足条件的个数cout for(int k=0;k<vec_I.size();k++){//第一次遍历只记录个数 int pos=vec_I[k].find(*it_R); if(pos!=-1){//如果I序列包含R中的数字 flag_have=1; cout++; } } if(flag_have==0) result.pop_back();//如果没有满足条件的,需要把加入的R<i>弹出 //第二遍:往result里放cout 对应的值和下标 if(flag_have==1){ result.push_back(cout); for(int k2=0;k2<vec_I.size();k2++){//第一次遍历只记录个数 int pos2=vec_I[k2].find(*it_R); if(pos2!=-1){//如果I序列包含R中的数字 result.push_back(k2); result.push_back(stoi(vec_I[k2])); } } } } } cout<<result.size()<<" "; for(auto it=result.begin();it!=result.end();it++){ cout<<*it<<" "; } } // 64 位输出请用 printf("%lld")