题目
解题
方法一:
用字符串find进行匹配查找
让R序列中每个元素都和L中每个元素去比对。
#include <iostream> #include <vector> #include <set> #include <algorithm> #include<string> using namespace std; int main() { int n; cin>>n; vector<string> L(n); for(int i=0;i<n;i++){ cin>>L[i]; } int m; cin>>m; auto cmp=[](const string& a,const string& b){ return stoi(a)<stoi(b); }; set<string,decltype(cmp)> R(cmp);//为了满足附加条件一,用集合去重和排序 for(int i=0;i<m;i++){ string x; cin>>x; R.insert(x); } vector<string> res;//序列L中,索引+元素 vector<int> nums;//R里面满足条件的r对应的序列L中的数量 vector<string> rs;//记录对应的R里面满足条件的r for(string r:R){ int num=0; for(int i=0;i<n;i++){ if(L[i].find(r)!=-1){ res.push_back(to_string(i));//记录索引 res.push_back(L[i]);//记录元素 num++; } } if(num>0){//为了满足附加条件2 rs.push_back(r); nums.push_back(num); } } cout<<res.size()+nums.size()+rs.size()<<' '; int j=0; for(int i=0;i<nums.size();i++){ cout<<rs[i]<<' '<<nums[i]<<' '; while(nums[i]--){ cout<<res[j]<<' '<<res[j+1]<<' '; j+=2; } } system("pause"); }