题解 | #数据分类处理#
数据分类处理
https://www.nowcoder.com/practice/9a763ed59c7243bd8ab706b2da52b7fd
#include <array>
#include <iostream>
#include <map>
#include <string>
#include <vector>
using namespace std;
const int N=110;
int n,m;
array<array<int,N>, N> a;
array<string,N>p;
bool isSubstr(string s1,string s2){
int l1=s1.length(),l2=s2.length();
for(int i=0,j=0;i<l1;i++){
while(i<l1&&s1[i]!=s2[j])i++;
int temp=i;
while(j<l2&&i<l1&&s1[i]==s2[j]){
i++,j++;
}
if(j==l2){
//cout<<s1<<" . "<<s2<<" ."<<endl;
return true;
}
else{
j=0,i=temp;
}
}
return false;
}
int main() {
vector<string> vi;
map<int, int>mr;
cin>>n;
string str;
for(int i=1;i<=n;i++){
cin>>str;
vi.push_back(str);
}
cin>>m;
int num;
for(int i=1;i<=m;i++){
cin>>num;
mr[num]++;
}
int index=0,sum=0;
for(auto i:mr){
string s=to_string(i.first);
bool flag=false;
for(int j=0;j<vi.size();j++){
if(isSubstr(vi[j], s)){
flag=true;
a[index][0]++;
a[index][a[index][0]]=j;
}
}
if(flag){
p[index]=s;
index++;
sum++;
}
}
for(int i=0;i<index;i++){
sum++;
sum+=a[i][0]*2;
}
cout<<sum<<" ";
for(int i=0;i<index;i++){
cout<<p[i]<<" "<<a[i][0]<<" ";
for(int j=1;j<=a[i][0];j++)
cout<<a[i][j]<<" "<<vi[a[i][j]]<<" ";
}
return 0;
}
// 64 位输出请用 printf("%lld")

