//此代码摘自zju3181 cover the sring Trie+DP typedef long long ll; struct TrieNode { TrieNode *sibling[26]; ll cnt; }; TrieNode *root; TrieNode *NewTrieNode() { TrieNode *a = new TrieNode; a->cnt = 0; memset(a->sibling, NULL, sizeof(a->sibling)); return a; } void TrieInsert(char *ts) { int i = 0, k; TrieNode *p = root; while(ts[i] != '/0') { k = ts[i]-'A'; if(p->sibling[k] == NULL) p->sibling[k] = NewTrieNode(); p = p->sibling[k]; i++; } p->cnt++; } ll TrieFind(int ptr, int end) { int i = ptr, k = 0; TrieNode *p = root; while(i <= end) { k = s[i]-'A'; if(p->sibling[k] != NULL) p = p->sibling[k]; else return 0; i++; } return p->cnt; } int main() { int N, i; while(scanf("%d", &N) != EOF) { root = NewTrieNode(); scanf("%d", &N); for(i = 0; i < N; i++) { scanf("%s", ts); TrieInsert(ts); } //TrieDel(root); } return 0; }