首页 > 其他分享 >洛谷真题字典树

洛谷真题字典树

时间:2022-09-18 09:33:04浏览次数:107  
标签:洛谷 真题 int char maxn 字典

P8306 【模板】字典树

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 int t,n,q;
 4 const int maxn=3000005;
 5 char s[maxn];
 6 int son[maxn][80],cnt[maxn],idx;
 7 int change(char s){
 8 //注意区分大小写字母以及数字 
 9     if(s>='A'&&s<='Z')return s-'A';
10     else if(s>='a'&&s<='z')return s-'a'+26;
11     return s-'0'+52;
12 }
13 void insert(char s[]){
14     int p=0;
15     for(int i=0;s[i];i++){
16         int u=change(s[i]);
17         if(!son[p][u])son[p][u]=++idx;
18         p=son[p][u];
19         cnt[p]++;
20         //此题求前缀,并非一模一样的字符串,cnt[p]++要放在for循环里 
21         //凡是出现过此字符串都计数,不必等到结束 
22     }
23 }
24 int find(char s[]){
25     int p=0;
26     for(int i=0;s[i];i++){
27         int u=change(s[i]);
28         if(!son[p][u])return 0;
29         p=son[p][u];
30     }
31     return cnt[p];
32     //返回出现次数而非是否出现过 
33 }
34 int main(){
35     scanf("%d",&t);
36     while(t--){
37 //        fill(son[0],son[0]+maxn*80,0);
38 //        memset(cnt,0,sizeof cnt);
39         for(int i=0;i<=idx;i++){
40         //不需要将整个数组用fill归零,时间复杂度会爆(3个点
41         //idx记录了改变过几列的值,只需要将操作过的值归零即可 !!! 
42             for(int j=0;j<=80;j++)son[i][j]=0;
43         }
44         for(int i=0;i<=idx;i++)cnt[i]=0;
45         //同son数组,不需要用memset赋值 
46         idx=0;
47         //切记idx归零!!! 
48         scanf("%d%d",&n,&q);
49         for(int i=1;i<=n;i++){
50             cin>>s;
51             insert(s);
52         }
53         while(q--){
54             cin>>s;
55             printf("%d\n",find(s));
56         }
57     }
58     return 0;
59 }

 

标签:洛谷,真题,int,char,maxn,字典
From: https://www.cnblogs.com/TFLSc1908lzs/p/16704218.html

相关文章

  • 2022上半年软件设计师真题解析
    选择题 ......
  • Day_1(并查集朋友圈、字典序排序)
    1.并查集朋友圈:找出最多的一个圈子内有多少用户!id[](表示当前节点的父节点)nodeNum[](表示当前节点为根的那一组节点数量)importjava.util.Scanner;//并查集class......
  • 洛谷 P1123 取数游戏(dfs)
    https://www.luogu.com.cn/problem/P1123题目大意:给定一个n*m的矩阵,问我们从里面怎样取能取到最大的总和?条件是选了一个数,下次它的八个方向上的数字就不能选了输入#1......
  • python数据类型之字典Dictionary
    1.python字典字典(dictionary)是除列表以外python之中最灵活的内置数据结构类型。列表是有序的对象集合,字典是无序的对象集合。两者之间的区别在于:字典当中的元素是通过......
  • def func(x, y, z=[]) 函数定义时,可以定义空列表空字典
    deffunc(x,y,z=[])函数定义时,可以定义空列表空字典deffunc(x=[]):foriinrange(1,300):x.append([i])print(x)#以上函数等同于#x=[[i,]f......
  • 洛谷P1262 间谍网络(tarjan求强连通分量+缩点)
    题目链接:https://www.luogu.com.cn/problem/P1262思路:首先,我们能够知道,入读为0的点如果不能被收买的话,那么此题是无解的。其次,如果图中存在环的话,那么环中每个点的......
  • 洛谷P2002 消息扩散(tarjan缩点)
    题目链接:https://www.luogu.com.cn/problem/P2002思路:由于图中每个强连通分量(scc)中的点是可以互相到达的,所以我们可以用tarjan求图中scc,然后将所有scc缩点,最后求缩点之......
  • 字典表设计
    一、业务场景Web项目开发中,字典表的一般都会存在,主要用来给整个系统提供基础服务。比如男女性别的类型可以使用0和1来进行表示,在存储数据和查询数据的时候,就可以使用......
  • 洛谷 P1036 [NOIP2002 普及组] 选数(dfs)
    https://www.luogu.com.cn/problem/P1036题目大意:从给定的n个数中选出m个求和,结果是一个素数的情况有多少种?输入43371219输出1这个题目的代码是根据Acwing中......
  • python学习(元组、字典、set集合)
    (一)、列表 1、列表的嵌套 需求:输出数字9 解决:利用索引层级输出   2、列表的切片   (二)、元组:tuple1、列表与元组的区别?列表是可变的,元组是不可变的......