wa1-5求调

P8306 【模板】字典树

aqua__ @ 2024-02-18 22:47:30

#include<iostream>

using namespace std;

const int N = 100010,M = 3000030;

int son[M][52],cnt[M],idx;
char a[N];
int n,q;

void insert(char *str){
    int p = 0;
    for(int i = 0;str[i];i ++ ){
        int u = str[i] - 'A';
        if(!son[p][u]){
            son[p][u] = ++ idx;
        }
        p = son[p][u];
        cnt[p] ++;
    }

}

int query(char *str){
    int p = 0;
    for(int i = 0;str[i];i ++ ){
        int u = str[i] - 'A';
        if(!son[p][u]){
            return 0;
        }
        p = son[p][u];
    }
    return cnt[p];
}

int main(){
    int T;
    cin >> T;
    while(T -- ){
        cin >> n >> q;
        for(int i = 0;i < n;i ++ ){
            cin >> a;
            insert(a);
        }
        for(int i = 0;i < q;i ++ ){
            cin >> a;
            cout << query(a) << endl;
        }
    }   
    return 0;
} 

by ZRZ0818 @ 2024-03-04 20:37:03

  1. 输入的字符串有大写小写字母和数字三种可能,需要分别判断;而且字典树数组的第二维开太小了.

  2. 因为有多组数据,所以字典树数组、计数数组和 idx变量都需要重置

(重置数组要用循环重置,用memset会T, 别问我为什么知道)


|