题解 | #数据分类处理#
数据分类处理
http://www.nowcoder.com/practice/9a763ed59c7243bd8ab706b2da52b7fd
#include<iostream>
#include<algorithm>
#include<vector>
#include<sstream>
using namespace std;
int main(){
int n1;
while(cin>>n1){
// int I[n1];
vector<int> I;
while(n1--){
int x;cin>>x;
I.push_back(x);
}
// for(int i=0;i<R.size();i++){
// cout<<R[i]<<" ";
// }
getchar();
int n2;cin>>n2;vector<int> R;
// int R[n2];
while(n2--){
// cin>>R[n2];
int x;cin>>x;
R.push_back(x);
}
//先对R去重排序
// for(int i=n1-1;i>=0;i--){
// for(int j=i-1;j>=0;j--){
// if(R[i]<R[j]){
// swap(R[i],R[j]);
// }
// else if(R[i] = R[j]){
// }
// }
// }
sort(R.begin(),R.end());
R.erase(unique(R.begin(),R.end()),R.end());
// for(int i=0;i<R.size();i++){
// cout<<R[i]<<" ";
// }
//第一个表示R中下标,如果没有的话那么index[i].size()=0
//第二个存放i的条件I,下标值
vector<vector<int>> index(R.size());
for(int i=0;i<R.size();i++){
int find=0;
//第一个元素放个数
index[i].push_back(find);
for(int j=0;j<I.size();j++){
// != string::npos
if(to_string(I[j]).find(to_string(R[i]))< to_string(I[j]).length()){
//存放下标
// cout<<"index j"<<j<<endl;
index[i].push_back(j);
find++;
}
}
index[i][0] = find;
}
int R_find_num = 0,sum=0;
for(int i=0;i<R.size();i++){
if(index[i][0] != 0){
R_find_num += 1;
sum += 1+ 2*(index[i].size()-1) ;
}
}
sum += R_find_num;
cout<<sum<<" ";
for(int i=0;i<R.size();i++){
if(index[i][0] != 0){
cout<<R[i]<<" "<<index[i].size()-1<<" ";
for(int j=1;j<index[i].size();j++){
int pos = index[i][j];
cout<<pos<<" "<<I[pos]<<" ";
}
}
}
}
}

