trie 90pts 求条
查看原帖
trie 90pts 求条
879904
WorldMachine楼主2023/11/11 07:56
#include <bits/stdc++.h>
using namespace std;
const int MAXN = 2505;
struct trie {
	int cnt, ch[MAXN][26];
	bool vis[MAXN];
	int num[MAXN];
	void insert(char s[]) {
		int len = strlen(s), p = 0;
		for (int i = 0; i < len; i++) {
			num[p]++;
			if (!ch[p][s[i] - 'a']) ch[p][s[i] - 'a'] = ++cnt;
			p = ch[p][s[i] - 'a'];
		}
		num[p]++;
		vis[p] = 1;
	}
	int ask(char s[]) {
		int len = strlen(s), p = 0;
		for (int i = 0; i < len; i++) {
			if (num[p] == 1) return i;
			p = ch[p][s[i] - 'a'];
		}
		return len;
	}
} t;
int n;
char s[55][55];
int main() {
	scanf("%d", &n);
	for (int i = 1; i <= n; i++) {
		scanf("%s", s[i]);
		t.insert(s[i]);
	}
	for (int i = 1, tmp; i <= n; i++) {
		tmp = t.ask(s[i]);
		for (int j = 0; j < tmp; j++) putchar(s[i][j]);
		printf("\n");
	}
}
2023/11/11 07:56
加载中...