标签:mat 大小 math 转移 src int include 数组 for
#include<iostream> #include<cstdio> #include<cstdlib> #include<cstring> #include<cmath> #include<algorithm> using namespace std; int t[250010][26]; int s[250010],sz; char ch[10500][35]; int n; void add(char* str) { int len=strlen(str); int now=0,k; for(int i=0;i<len;i++) { k=str[i]-‘a‘; if(!t[now][k])t[now][k]=++sz; now=t[now][k]; s[now]++; } } void ask(char* str) { int len=strlen(str); int now=0,k; for(int i=0;i<len;i++) { if(s[now]==1)return; k=str[i]-‘a‘; printf("%c",str[i]); now=t[now][k]; } } int main() { scanf("%d",&n); for(int i=0;i<n;i++) { scanf("%s",ch[i]); add(ch[i]); } for(int i=0;i<n;i++) { printf("%s ",ch[i]); ask(ch[i]); printf("\n"); } }
数组记录的Trie树
k表示字符串第i个字符 now表示现在树记到的位置 now的转移每次都是now=t[now][k]
sz记录树的大小
s[now]表示有多少个单词经过now这个点
标签:mat 大小 math 转移 src int include 数组 for
原文地址:http://www.cnblogs.com/Kong-Ruo/p/7701324.html