求助trie数据太弱过了
查看原帖
求助trie数据太弱过了
1058598
iwantr楼主2023/11/11 22:51

按理说trie应该开到5e6但实际上只开到1e6就过掉了,而且洛谷的空间评判似乎有点问题,1e6*26的大小差不多有100mb但是洛谷只显示了40多mb,在codeforces上的机子上跑同样的代码显示的都是11000KB

#include <bits/stdc++.h>
using namespace std;
#define endl "\n"
const int M=1e6+10;
int son[M][26];
int j;
vector<int> cnt[M];
void insert(string s,int x){
	int p=0;
	for(int i=0;i<(int)s.size();i++){
		int u=s[i]-'a';
		if(!son[p][u]) son[p][u]=++j;
		p=son[p][u];
	}
	cnt[p].push_back(x);
}
vector<int> query(string s){
	int p=0;
	vector<int> b;
	for(int i=0;i<(int)s.size();i++){
		int u=s[i]-'a';
		if(!son[p][u]) return b;
		p=son[p][u];
	}
	return cnt[p];
}
void solved(){
   int n;
   cin>>n;
   for(int i=1;i<=n;i++){
   	  int m;
   	  cin>>m;
   	  for(int j=1;j<=m;j++){
   	  	 string s;
   	  	 cin>>s;
   	  	 insert(s,i);
	}
   }
   int m;
   cin>>m;
   while(m--){
   	string s;
   	cin>>s;
   	vector<int> p=query(s);
   	set<int> d;
   	for(int k:p) d.insert(k);
   	for(int k:d) cout<<k<<" ";
   	cout<<endl;
   }
}
int main(){
	ios::sync_with_stdio(false);
	cout.tie(0);
	cin.tie(0);
	int t=1;
	while(t--){
		solved();
	}
	
}
2023/11/11 22:51
加载中...