社区讨论

萌新trie0分求条

P3879[TJOI2010] 阅读理解参与者 3已保存回复 7

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
7 条
当前快照
1 份
快照标识符
@mlgxvnsh
此快照首次捕获于
2026/02/11 02:33
上周
此快照最后确认于
2026/02/11 02:33
上周
查看原帖
CPP
#include <bits/stdc++.h>
using namespace std;
const int N = 5e6+5;
int t[N][90], tot;
char s[N], tmp[N];
int T, n, Q;
vector<int>book[N];
void insert(int belong, char *s, int ln) {
	int u = 0;
	for (int i = 0; i < ln; i++) {
		int v = s[i] - 'a';
		if (!t[u][v])
			t[u][v] = ++tot;
		u = t[u][v];
	}
	book[u].push_back(belong);
}
void search(char *s, int ln) {
	int u = 0;
	for (int i = 0; i < ln; i++) {
		int v = s[i] - 'a';
		if (!t[u][v])
			return;
		u = t[u][v];
	}
	book[u].erase(unique(book[u].begin(), book[u].end()), book[u].end());
	for (int i = 0; i < book[u].size()-1; i++) {
        if(i==book[u].size()-1) cout<<book[u][i];
		else cout << book[u][i] << ' ';
    }
	cout << endl;
}
void solve() {
	cin >> T;
	for (int i = 1; i <= T; i++) {
		cin >> n;
		for (int j = 0; j < n; j++) {
			scanf("%s", s);
			insert(i, s, strlen(s));
		}
	}
	cin >> Q;
	while (Q--) {
		scanf("%s", tmp);
		search(tmp, strlen(tmp));
	}
}
int main() {
	solve();
	return 0;
}

回复

7 条回复,欢迎继续交流。

正在加载回复...