题解 | #数据分类处理#
数据分类处理
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]<<" "; } } } } }