今天刚看的字典树, 就RE了一发, 字典树原理还是很简单的, 唯一的问题就是不知道一维够不够用, 就开的贼大, 这真的是容易MLE的东西啊, 赶紧去学优化吧。
这道题唯一的问题就是会不会字典树, 2333, 给一个字典树的博客传送门, 话说这个博客一搜就搜到了啊.
代码:
#include<bits/stdc++.h>
using namespace std;
#define LL long long
#define ULL unsigned LL
#define fi first
#define se second
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
#define max3(a,b,c) max(a,max(b,c))
#define min3(a,b,c) min(a,min(b,c))
const int INF = 0x3f3f3f3f;
const LL mod = 1e9+;
typedef pair<int,int> pll;
const int N = 1e6+;
int tree[N][];
int sum[N];
char str[];
int tot = ;
void Insert(){
int rt = ;
int len = strlen(str);
for(int i = ; i < len; i++){
int id = str[i] - 'a';
if(tree[rt][id] == ) tree[rt][id] = tot++;
sum[tree[rt][id]]++;
rt = tree[rt][id];
}
}
int Find(){
int rt = ;
int len = strlen(str);
for(int i = ; i < len; i++){
int id = str[i] - 'a';
if(tree[rt][id] == ) return ;
rt = tree[rt][id];
}
return sum[rt];
}
int main(){
while(cin.getline(str, )){
if(!isalpha(str[])) break;
Insert();
}
while(cin.getline(str, )){
printf("%d\n",Find());
}
return ;
}
水水水