20分蒟蒻求助
查看原帖
20分蒟蒻求助
549027
__JiCanDuck__楼主2023/1/10 14:39
#include <cstring>
#include <fstream>
#include <iostream>
#include <vector>

using namespace std;

const int kMaxN = 3e6 + 1;

int n, t, a[kMaxN][60], cnt, ans, Cnt[kMaxN], q;
string s;

int zhuan(char x) {
  if (x >= 'A' && x <= 'Z')
    return x - 'A';
  else if (x >= 'a' && x <= 'z')
    return x - 'a' + 26;
  return -1;
}

void Add(string s) {
  int p = 0, ok = 0, l = s.size();
  for (int i = 0; i < l; i++) {
    int c = zhuan(s[i]);
    if (!a[p][c]) {
      a[p][c] = ++cnt;
    }
    p = a[p][c];
    Cnt[p]++;
  }
}

int check(string s) {
  int p = 0, ok = 0, l = s.size();
  for (int i = 0; i < l; i++) {
    int c = zhuan(s[i]);
    if (!a[p][c]) {
      return 0;
    }
    p = a[p][c];
  }
  return Cnt[p];
}

int main() {
  ios :: sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  for (cin >> q; q; q--) {
    cin >> n >> t;
    for (int i = 1; i <= cnt; i++) {
      for (int j = 1; j <= 52; j++) {
        a[i][j] = 0;
      }
    }
    for (int i = 1; i <= cnt; i++) {
      Cnt[i] = 0;
    }
    for (int i = 1; i <= n; i++) {
      cin >> s;
      Add(s);
    }
    for (int i = 1; i <= t; i++) {
      ans = 0;
      cin >> s;
      cout << check(s) << '\n';
    }
  }
  return 0;
}

样例没错,脚造数据也没错

2023/1/10 14:39
加载中...