只对了#11 求助
查看原帖
只对了#11 求助
716260
SegmentTree_楼主2023/9/23 14:55

MLE 10

#include<bits/stdc++.h>
using namespace std;
#define LL long long
const int N = 1e5*5+1;
int n, m, tot, Len;
int trie[N][26];
bool word[N][1001];
string str;
void insert(string str, int id){
	int len = str.size();
	int u = 0, res = 0;
	for (int i = 0;i < len;i++){
		int a = str[i] - 'a';
		if (trie[u][a] == 0){
			trie[u][a] = ++tot;
		}
		u = trie[u][a];
	}
	word[u][id] = 1;
}
void find(string str){
	int len = str.size();
	int u = 0;
	for (int i = 0;i < len;i++){
		int a = str[i] - 'a';
		if (trie[u][a] == 0){
			printf("\n");
			return;
		}
		u = trie[u][a];
	}
	for (int i = 1;i <= n;i++){
		if (word[u][i]){
			printf("%d ", i);
		}
	}
	printf("\n");
}
int main(){
	scanf("%d", &n);
	for (int i = 1;i <= n;i++){
		scanf("%d", &Len);
		for (int j = 1;j <= Len;j++){
			cin >> str;
			insert(str, i);
		}
	}
	scanf("%d", &m);
	for (int i = 1;i <= m;i++){
		cin >> str;
		find(str);
	}
    return 0;
} 

如果word开成[N][501]就是WA 90,除了#11全对

2023/9/23 14:55
加载中...