52pts WA#2#3#4
查看原帖
52pts WA#2#3#4
1126316
shz_CC楼主2025/1/24 16:07
#include <bits/stdc++.h>

using namespace std;

int trans(char c) {
    if (c >= 'a' && c <= 'z') return c - 'a' + 1;
    else if (c >= 'A' && c <= 'Z') return c - 'A' + 27;
    else if (c >= '0' && c <= '9') return c - '0' + 53;
    else return 0;
}

const int MAXN = 3e6 + 10;

int tot = 1, ch[MAXN][70], sz[MAXN];

int tmp_len;//插入字符串的长度
char tmp[MAXN];//插入字符串

void insert() {//
	int u = 1;
    sz[1]++;
	for (int i = 1; i <= tmp_len; ++i) {
        if (!ch[u][trans(tmp[i])]) {
            ch[u][trans(tmp[i])] = ++tot;
        }

		u = ch[u][trans(tmp[i])];

        sz[u]++;
	}
}

int query() {
    int u = 1;
    for (int i = 1; i <= tmp_len; ++i) {
        if (!ch[u][trans(tmp[i])]) {
            return 0;
        }

        u = ch[u][trans(tmp[i])];
    }

    return sz[u];
}

signed main() {
	int T; cin >> T;
	while(T--){
        for (int i = 1; i <= tot; ++i) {
            sz[i] = 0;
            for (int j = 0; j < 62; ++j) {
                ch[i][j] = 0;
            }
        }

        tot = 1;

        int n, m; 
        cin >> n >> m;
        for (int i = 1; i <= n; ++i) {
            cin >> tmp + 1;

            tmp_len = strlen(tmp + 1);

            insert();
        }
        for (int i = 1; i <= m; ++i) {
            cin >> tmp + 1;

            tmp_len = strlen(tmp + 1);

            cout << query() << '\n';
        }
	}

    return 0;
}

求调

2025/1/24 16:07
加载中...