题解 | #数据分类处理#
数据分类处理
https://www.nowcoder.com/practice/9a763ed59c7243bd8ab706b2da52b7fd
#include <iostream> #include <algorithm> #include <vector> #include <sstream> #include <string> #include <set> using namespace std; int main() { int numI ; cin>>numI; string inputI; getline(cin,inputI); int numR; cin>>numR; int count = numR; set<int> setR;//存放R while(count--) { int temp; cin>> temp; setR.insert(temp); } numR = setR.size(); //由于不提供随机访问,将R写入vector vector<int> R; for(auto i:setR) R.push_back(i); vector<string> I;//存放I stringstream ss(inputI); string tempstr; while(getline(ss,tempstr,' ')) { I.push_back(tempstr); } vector<vector<int>> result(numR);//存储子串含有R的I序号 int resultNum = numR*2; for(int i = 0; i < I.size();i++)//i为I序号 { for(int t = 0; t < R.size(); t++)//t为R序号 { //将int转成string方便比较 stringstream rss; string Rstr; rss << R[t]; getline(rss,Rstr); int strlen = Rstr.size(); if(I[i].size()<strlen) continue; //比较R[t]和I[i]中所有大小为strlen的子串 for(int j = 0; j <= I[i].size()-strlen;j++) { string str(""); str = I[i].substr(j,strlen); if(str==Rstr) { result[t].push_back(i); resultNum+=2; break; } } } } for(auto i:result) if(i.size()==0) resultNum-=2; cout<<resultNum<<" "; for(int i = 0; i < result.size();i++) { if(result[i].size()!=0) { cout<<R[i]<<" "<<result[i].size()<<" "; for(auto t:result[i]) cout<<t-1<<" "<<I[t]<<" "; } } } // 64 位输出请用 printf("%lld")