与例程相近, 为什么输出不对?
查看原帖
与例程相近, 为什么输出不对?
1373219
acommonman楼主2025/1/27 21:54
#include <bits/stdc++.h>
using namespace std;
#define vc vector
typedef long long ll;
const int N = 3e6 + 7;

int Trie[N][62], num[N], pos;

void __init(){//初始化
    memset(num, 0, sizeof(num[0])*pos);
    memset(Trie, 0, sizeof(Trie[0])*pos);
    pos = 0;
}

int Index(char c){//字符映射
    if(c >= 'a' && c <= 'z')return c - 'a';
    if(c >= 'A' && c <= 'Z')return c - 'A' + 26;
    else return c - '0' + 52;//数字
}

void Insert(string s){//插入单词
    int p = 0; 
    for(int i = 0; i < s.size(); i++){
        int n = Index(s[i]);
        if(!Trie[p][n])Trie[p][n] = pos++;
        p = Trie[p][n];
        num[p]++;
        // cout << "Inserting: " << s[i] << " -> " << p << endl;
    }
}

int Find(string s){//查询
    int p = 0;
    for(int i = 0; i < s.size(); i++){
        int n = Index(s[i]);
        if(!Trie[p][n])return 0;
        p = Trie[p][n];
        // cout << "Finding: " << s[i] << " -> " << p << endl;
    }
    return num[p];
}

int main() {
    ios::sync_with_stdio(0);
    cin.tie(nullptr);

    int T;
    cin >> T;
    while(T--){
        __init();//初始化
        int n, q; cin >> n >> q;
        for(int i = 1; i <= n; i++){
            string s; cin >> s;
            Insert(s);
        }
        for(int i = 1; i <= q; i++){
            string s; cin >> s;
            cout << Find(s) << "\n";
        }
    }
}
2025/1/27 21:54
加载中...