最短的名字

2022-09-13 17:36:09 字數 1401 閱讀 7984

在乙個奇怪的村子中,很多人的名字都很長,比如aaaaa, bbb and abababab。

名字這麼長,叫全名顯然起來很不方便。所以村民之間一般只叫名字的字首。比如叫\'aaaaa\'的時候可以只叫\'aaa\',因為沒有第二個人名字的前三個字母是\'aaa\'。不過你不能叫\'a\',因為有兩個人的名字都以\'a\'開頭。村里的人都很聰明,他們總是用最短的稱呼叫人。輸入保證村里不會有乙個人的名字是另外乙個人名字的字首(作為推論,任意兩個人的名字都不會相同)。

如果村里的某個人要叫所有人的名字(包括他自己),他一共會說多少個字母?

輸入第一行為資料組數t (t<=10)。每組資料第一行為乙個整數n(1<=n<=1000),即村里的人數。以下n行每行為乙個人的名字(僅有小寫字母組成)。輸入保證乙個村里所有人名字的長度之和不超過1,000,000。

對於每組資料,輸出所有人名字的字母總數。

1

3aaaaa

bbbabababab

5
題意:給定一些字串,求區分這些串至少需要多少個字母

題解:簡單字典樹模板可用,注意**記憶體即可

#include

#include

#include

using namespace std;

struct node*t,*h;

char s[1005][1005];

int n,i,j,l,t0;

void make(int k,node *h)

h->a[s[i][x]-'a']=t;

h=t;}}

}void finder(int k,int m,node *h)

void delet(node *p)

delete p;

}int main()

int sum=0;

for(i=1;i<=n;i++)

printf("%d\n",sum);

delet(h);}}

解法二:建樹然後對整個樹深搜遍歷一遍得結果

#include

#include

#include

char ss[1005][1005];

struct lmx*h,*p,*q;

int sum;

void build(char s)

p->a[temp]=q;

p=p->a[temp];

}else}}

int  finder(lmx *h)

}return sum;

}void delet(lmx *p)

}free(p);

}int main()

printf("%d\n", finder(h));

delet(h);

}return 0;

}

最短的名字

在乙個奇怪的村子中,很多人的名字都很長,比如aaaaa,bbb and abababab。名字這麼長,叫全名顯然起來很不方便。所以村民之間一般只叫名字的字首。比如叫 aaaaa 的時候可以只叫 aaa 因為沒有第二個人名字的前三個字母是 aaa 不過你不能叫 a 因為有兩個人的名字都以 a 開頭。村...

最短的名字

description 在乙個奇怪的村子中,很多人的名字都很長,比如aaaaa,bbb and abababab。名字這麼長,叫全名顯然起來很不方便。所以村民之間一般只叫名字的字首。比如叫 aaaaa 的時候可以只叫 aaa 因為沒有第二個人名字的前三個字母是 aaa 不過你不能叫 a 因為有兩個人...

最短的名字

ription 在乙個奇怪的村子中,很多人的名字都很長,比如aaaaa,bbb and abababab。名字這麼長,叫全名顯然起來很不方便。所以村民之間一般只叫名字的字首。比如叫 aaaaa 的時候可以只叫 aaa 因為沒有第二個人名字的前三個字母是 aaa 不過你不能叫 a 因為有兩個人的名字都...