題目大意:
輸入多串數字串,要求判斷是否有的數字串是其它串的前綴。如果存在輸出NO,否則輸出YES。
解題思路:
用trie建立字典樹,然後在每個數字串的結尾處標志1,之後每輸入一個串,就判斷一下。是否有之前的標志記號。
#include#include #include #include using namespace std; const int MAX_LEN = 11; typedef struct trie { trie *next[10]; int num; }T; T *tree; bool flag; void trieDel(T *p){ for(int i=0;i<10;i++){ if(p->next[i]!=NULL) trieDel(p->next[i]); } free(p); } void trieInsert(char str[]){ T *p=tree,*q; int len=strlen(str); for(int i=0;i next[id]==NULL){ q=new T; for(int j=0;j<10;j++) q->next[j]=NULL; q->num=0; p->next[id]=q; p=p->next[id]; } else p=p->next[id]; if(p->num == 1) flag =false; } p->num=1; for(int i=0;i<10;i++){ if(p->next[i]!=NULL){ flag=false; break; } } } void init(){ tree = new T; for(int i=0;i<10;i++) { tree->next[i]=NULL; } } int main() { int cas; scanf("%d",&cas); while(cas--){ flag=true; int n; scanf("%d",&n); getchar(); init(); for(int i=0;i 以下代碼沒用字典樹:
#include#include #include