求救!求救!
为什么RE呢?
#include<bits/stdc++.h>
#define endl '\n'
using namespace std;
const int N=1e6+10;
struct Trie{
struct Node{
bool isword;
int cnt=0;
int p[15];
};
int num=0;
bool flag=0;
Node a[N];
void init(){
for(int i=0;i<=num;i++){
a[i].cnt=0;
a[i].isword=0;
memset(a[i].p,0,sizeof(a[i].p));
}
num=0;
}
void insert(string s){
int root=0;
for(int i=s.size()-1;i>=0;i--){
int x=s[i]-'0';
if(a[root].p[x]==0){
num++;
a[root].p[x]=num;
}
root=a[root].p[x];
a[root].cnt++;
a[root].isword=0;
}
a[root].isword=1;
}
int ph_cnt=0;
string ph_ans=0;
void query_ans(int root,string st){
if(a[root].isword){
ph_cnt++;
ph_ans=ph_ans+st+" ";
return ;
}
for(int x=0;x<9;x++){
if(!a[root].p[x]){
continue;
}
query_ans(a[root].p[x],char(x+'0')+st);
}
}
};
string name[20];
map<string,Trie> mp;
int n;
signed main(){
ios::sync_with_stdio(false);
cin.tie(0),cout.tie(0);
cin>>n;
for(int i=1;i<=n;i++){
cin>>name[i];
int x;
cin>>x;
for(int j=1;j<=x;j++){
string y;
cin>>y;
mp[name[i]].insert(y);
}
}
for(int i=1;i<=n;i++){
if(mp[name[i]].flag){
continue;
}
mp[name[i]].flag=1;
mp[name[i]].query_ans(0,"");
cout<<name[i]<<' '<<mp[name[i]].ph_cnt<<' '<<mp[name[i]].ph_ans<<endl;
}
return 0;
}