HDU 1671 Phone List

来源:互联网 发布:免费数据采集器 编辑:程序博客网 时间:2024/05/21 08:53
#include <iostream>#include <cstdlib>#include <cstdio>#include <string>#include <cstring>#include <cmath>#include <vector>#include <queue>#include <stack>#include <algorithm>using namespace std;const int maxnode = 10010 * 110;const int sigma_size = 26;struct Trie{      int ch[maxnode][sigma_size];      int val[maxnode];      int sz;    void init() { sz = 1; memset(ch[0], 0, sizeof(ch[0])); }    int idx (char c) { return c-'0'; }            void insert(char *s)      {          int u = 0, n = strlen(s);          for(int i = 0; i < n; i++)          {              int c = idx(s[i]);              if(!ch[u][c])              {                  memset(ch[sz], 0, sizeof(ch[sz]));                  val[sz] = 0;                  ch[u][c] = sz++;              }              u = ch[u][c];              val[u]++;          }      }    int find(char *s){int u = 0, n = strlen(s);for(int i = 0; i < n; i++){int c = idx(s[i]);if(!ch[u][c]) return 0;u = ch[u][c];}return val[u] == 1;}}; Trie trie;const int maxn = 10100;char str[maxn][110];int n;void read_case(){trie.init();scanf("%d", &n);for(int i = 0; i < n; i++) scanf("%s", str[i]), trie.insert(str[i]);}void solve(){read_case();for(int i = 0; i < n; i++) if(!trie.find(str[i])) { printf("NO\n"); return ; }printf("YES\n");}int main(){int T;scanf("%d", &T);while(T--){solve();}return 0;}


 

原创粉丝点击