【Trie】查單詞(C++)

[Submit][Status][Web Board]

Description

全國英語四級考試就這樣如期到來了,可是小Y依然沒有做好充分準備。爲了能大學畢業,可憐的小Y準備作弊。
小Y費盡心機,在考試的時候夾帶了一本字典進考場。現在的問題是:考試的時候可能有很多單詞要查,小Y能不能來得及呢?

Input

第一行一個整數N,表示字典中一共有多少個單詞。
接下來每兩行表示一個單詞,其中:第一行是一個長度≤100的字符串,表示這個單詞,全部是小寫字母,單詞不會重複;第二行是一個整數,表示這個單詞在字典中的頁碼。
接下來一行是一個整數M,表示要查的單詞數。
接下來M行,每行一個字符串,表示要查的單詞,保證在字典中存在。
N≤10000,M≤10000

Output

M行,每行一個整數,表示第i個單詞在字典中的頁碼。

Sample Input

2
scan
10
word
15
2
scan
word

Sample Output

10
15

HINT

[Submit][Status]

trie【字典樹】模板題,直接看代碼:

#include<bits/stdc++.h>
using namespace std;
const int maxn=1e6+10;
char str[110];
int a[maxn][26],tot,End[maxn];
void ins(char *str,int f) {
    int n=strlen(str),p=0;
    for(int i=0;i<n;i++)
    {
        int l=str[i]-'a';
        if (!a[p][l])
            a[p][l]=++tot;
        p=a[p][l];
    }
    End[p]=f;
}
int find(char *str) {
    int n=strlen(str),p=0;
    for(int i=0;i<n;i++)
    {
        int l=str[i]-'a';
        p=a[p][l];
        if(!p)return 0;
    }
    return End[p];
}
int main() {
    int n,m;
    scanf("%d",&n);
    tot=0;
    for(int i=1;i<=n;i++)
    {
        int f;
        scanf("%s%d",str,&f);
        ins(str,f);
    }
    scanf("%d",&m);
    for(int i=1;i<=m;i++)
    {
        scanf("%s",str);
        printf("%d\n",find(str));
    }

    return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章