90pts,11WA
查看原帖
90pts,11WA
856008
Mirror_of_the_Sky楼主2024/4/9 22:56

rt。最后一个数据点过不去,有哪位大佬能帮我看看?

#include <bits/stdc++.h>
using namespace std;
char a[50005];
int ch[500005][26],tot,n;
bool cnt[500005][110];
void insert(int x) {
	cin>>a;
	int p=0,len=strlen(a);
	for(int i=0; i<len; i++) {
		int c=a[i]-'a';
		if(ch[p][c]==0) {
			ch[p][c]=++tot;
		}
		p=ch[p][c];
	}
	cnt[p][x]=true;
}
void find() {
	cin>>a;
	int p=0,len=strlen(a);
	int flag=0;
	for(int i=0; i<len; i++) {
		int c=a[i]-'a';
		if(ch[p][c]==0) {
			flag=1;
			break;
		}
		p=ch[p][c];
	}
	if(flag==0) {
		for(int i=1; i<=n; i++) {
			if(cnt[p][i]) {
				cout<<i<<" ";
			}
		}
	}
	cout<<endl;
}
int main() {

	cin>>n;
	for(int i=1; i<=n; i++) {
		int x;
		cin>>x;
		for(int j=1; j<=x; j++) {
			insert(i);
		}
	}
	int m;
	cin>>m;
	for(int i=1; i<=m; i++) {
		find();
	}
}
2024/4/9 22:56
加载中...