/* 如果你想到了字典就是很水的题目,为何比赛的时候就是想不到的说?? 公式:结点个数 * 2 - 最长的字符串 + n */ #include <iostream> #include <cstdio> using namespace std; struct Trie { Trie *child[26]; Trie() { for(int i = 0; i < 26; i++) child[i] = NULL; } }; Trie *root; int Min ; int count; void Insert(char str[]) { int len = strlen(str); if(len > Min) Min = len; Trie *p = root; for(int i = 0; i < len; i++) { if(p ->child[str[i] - 'a'] != NULL) p = p->child[str[i] - 'a']; else { Trie *r = new Trie(); p->child[str[i] - 'a'] = r; p = r; count++; } } } int main() { int n; char str[55]; while( scanf("%d", &n) != EOF) { count = 0; Min = -0x7ff; root = new Trie(); for(int i = 0; i < n; i++) { scanf("%s", str); Insert(str); } //printf("%d = %d/n", count, Min); printf("%d/n", 2 * count - Min + n); } }