首页 > 其他分享 >字符串练习1 于是他错误的点名开始了(Trie)

字符串练习1 于是他错误的点名开始了(Trie)

时间:2022-11-18 01:55:22浏览次数:75  
标签:cnt 点名 vis Trie MAX memset int 字符串 sizeof

题目链接在这里:P2580 于是他错误的点名开始了 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

是一道trie树的板子题,注意理解trie树的每一个节点代表的是一个状态,这个状态是一个前缀。

 1 #include "bits/stdc++.h"
 2 using namespace std;
 3 const int MAX=5e5+5;
 4 int n,m;
 5 struct Str{
 6     int str[MAX][30],tot;
 7     int cnt[MAX]; 
 8     bool vis[MAX];
 9     Str(){
10         tot=0;
11         memset(vis,false,sizeof(vis));
12         memset(str,0,sizeof(str));
13         memset(cnt,0,sizeof(cnt));
14     }
15     void insert(char *s){
16         int i,j,p=0;
17         int ls=strlen(s+1);
18         for (i=1;i<=ls;i++){
19             if (str[p][s[i]-'a']==0){
20                 str[p][s[i]-'a']=++tot;
21                 p=tot;
22             }
23             else p=str[p][s[i]-'a'];
24         }
25         vis[p]=true;
26     }
27     int check(char *s){
28         int i,j,ls,p=0;
29         ls=strlen(s+1);
30         for (i=1;i<=ls;i++){
31             if (str[p][s[i]-'a']==0) return 0;
32             p=str[p][s[i]-'a'];
33         }
34         if (!vis[p]) return 0; 
35         if (cnt[p]==0){
36             cnt[p]++;
37             return 1;
38         }
39         else return 2;
40     }
41 }ss;
42 int main(){
43     int i,j;char s[MAX];
44     scanf("%d",&n);
45     for (i=1;i<=n;i++){
46         scanf("\n%s",s+1);
47         ss.insert(s);
48     }
49     scanf("%d",&m);
50     for (i=1;i<=m;i++){
51         scanf("\n%s",s+1);
52         j=ss.check(s);
53         if (j==0) printf("WRONG\n");
54         if (j==1) printf("OK\n");
55         if (j==2) printf("REPEAT\n");
56     }
57     return 0;
58 }

 

标签:cnt,点名,vis,Trie,MAX,memset,int,字符串,sizeof
From: https://www.cnblogs.com/keximeiruguo/p/16901951.html

相关文章

  • JAVA字符串应用
    字符串查找判断子字符串是否存在str.indexOf("B");实例运行点击查看代码publicclassstring7{ publicstaticvoidmain(String[]args){ Stringstr1="88......
  • 字符串和编码
    背景:日常工作中,或多或少的都会遇到编码问题,大都定义为UTF-8或者GB2312都能处理,但是总觉得一知半解,今稍微总结下白话理解:1.字符编码产生原因:在计算机底层存储中都是由......
  • 冒泡排序法2.0版本,加输入、输出数组字符串
    大家晚上好呀,今天给大家带来的是冒泡排序法的代码,首先我们以一些简单的数字来举例,根据昨天已有的知识点,我们可以利用二重循环写出基本代码,如图但是我这个有问题,但我目前还没......
  • Java中的字符串
    String类声明字符串声明一个字符串就是创建一个字符串对象。语法Stringa;Stringa,b,c;注意Stringa;相当于Stringa=null;创建字符串给字符串赋值的方法:1.......
  • JavaScript字符串MD5
    进行HTTP网络通信的时候,调用API向服务器请求数据,有时为了防止API调用过程中被黑客恶意篡改,所请求参数需要进行MD5算法计算,得到摘要签名。服务端会根据请求参数,对签名进行验......
  • 09python字符串
    在05python字符串基础中我们已经大致介绍过字符串,知道如何创建字符串,以及如何使用索引和切片来访问字符串中的字符。这篇文章主要介绍如何使用字符串来设置其他值的格式(比......
  • java正则匹配字符串最外层{}里的内容,包含{}
    Strings="start{sffff''{adfaw3ea}wfewrfwef----}";Stringregex="(?<=\\{).*(?=\\})";Patternpattern=Pattern.compile(regex);Matchermatcher=pattern.matc......
  • js中的模板字符串问题
    在写js的字符串时,虽然单双引号都用了,但是${}修饰的字符串却始终没有正确替换为变量,最后查了一下语法,发现和python中不同,js中的模板字符串是需要用反引号的,而不是一般引号,就......
  • php 反序列化字符串逃逸
    这里总结一下反序列化字符串逃逸的知识点反序列化字符串逃逸分为被过滤后字符增多和字符减少的情况这里就不讲之前的基础知识了大家看其它师傅写的博客就可以了很多师......
  • 数组转化为字符串
    这是初始值:data(){ tap:[ {taps:''} ]}; tapCode:''要将tap中的数据转化为字符串储存在tapCode中: this.tapCode="";//要确保字符串为空for(leti=0;......