hdu1251 字典樹trie 模板題
阿新 • • 發佈:2019-02-14
//字典樹模板題.題意:給一個庫,每次查詢,求以之為字首的單詞數量。 #include<iostream> #include<string> #include<vector> #include<cstdio> #include<cstring> using namespace std; int tree[500000][27]; int w[500000]; //記錄結點屬性。 int numv=0; // 全域性變數,記錄頂點編號 int n; void insert(string s) //建樹 tree[u][i]:結點u的第i個孩子('a'為0,以此類推). { //值是i對應的孩子結點編號.這個要遍歷孩子邊,要遍歷26次, //否則新增vector<vector<> >,來儲存邊也可. int u=0; int len=s.size(); for(int i=0;i<len;i++) { if(tree[u][s[i]-'a']==0) //新建頂點 { tree[u][s[i]-'a']=++numv; } u=tree[u][s[i]-'a']; //往下找 w[u]++; } } int find(string s) { int u=0; int len=s.size(); for(int i=0;i<len;i++) //找不到 { if(tree[u][s[i]-'a']==0) return 0; u=tree[u][s[i]-'a']; } return w[u]; } int main() { string s; while(1) //一直讀入字串,到換行為止 { cin>>s; insert(s); getchar(); if(cin.peek()=='\n')break; } while(cin>>s) { cout<<find(s)<<endl; } return 0; }