P3879 [TJOI2010] 阅读理解 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
trie树板子题,稍微有一丢丢不一样,套用字典树模板稍加修改就能过
手搓字典树代码:
char ch[1010][26], cnt[1010], idx;
void insert(string s)//插入
{
int p = 0;
for (int i = 1; s[i]; i++)
{
int j = s[i] - 'a';
if (!ch[p][j])
{
ch[p][j] = ++idx;
}
p = ch[p][j];
}
cnt[p]++;
}
int query(string s)//查询
{
int p = 0;
for (int i = 1; s[i]; i++)
{
int j = s[i] - 'a';
if (!ch[p][j])
{
return 0;
}
p = ch[p][j];
}
return cnt[p];
}
题解代码:
#include<bits/stdc++.h>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<vector>
#include<math.h>
using namespace std;
typedef long long ll;
char s[50010];
char ch[500010][26], idx;
char w[500010][1010];
int n, m;
inline int read()
{
int k = 0, f = 1;
char ch = getchar();
while (ch < '0' || ch>'9')
{
if (ch == '-')
f = -1;
ch = getchar();
}
while (ch >= '0' && ch <= '9')
{
k = k * 10