题目链接 :
分析:字典树题目变种,这里的字典树指的是0--9的变化。基本原理没有大的变化就是字典树查找。
(1)这道题就是找到这组电话号码中是否有 某个电话号码的前n-1个子串是否由其他的电话号码组成。是就输出NO,否就输出YES.题目大意很简单,字典树时的使用就是套模板,做这种题第一次最好自己写一遍模板,以后自己可以直接使用自己的模板。我的字典树模板见 。
#include#include #include #include #define MAXNUM 10using namespace std;//定义字典树typedef struct Trie{ bool flag;//从根到此是否为一个单词 Trie *next[MAXNUM];}Trie;Trie *root;void init(){ root = (Trie *)malloc(sizeof(Trie)); root->flag=false; for(int i=0;i next[i]=NULL;}void insert(char *word){ Trie *tem = root; while(*word!='\0') { if(tem->next[*word-'0']==NULL) { Trie *cur = (Trie *)malloc(sizeof(Trie)); for(int i=0;i next[i]=NULL; cur->flag=false; tem->next[*word-'0']=cur; } tem = tem->next[*word-'0']; word++; } tem->flag=true;}bool search(char *word){ Trie *tem = root; for(int i=0;word[i]!='\0';i++) { if(tem==NULL||tem->next[word[i]-'0']==NULL) return 0; tem=tem->next[word[i]-'0']; } return tem->flag;}void del(Trie *cur){ for(int i=0;i next[i]!=NULL) del(cur->next[i]); } free(cur);}int main(){ int t,n; bool flag; char phone_num[10005][20]; char num[20]; scanf("%d",&t); while(t--) { init(); flag = true; scanf("%d",&n); for(int i=0;i