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

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

时间:2022-11-20 10:05:09浏览次数:77  
标签:cnt 点名 vis Trie MAX int str 字符串 return

题目链接在这里:​​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,int,str,字符串,return
From: https://blog.51cto.com/u_15793969/5871252

相关文章

  • T292219 [传智杯 #5 练习赛] 复读 ----- 字符串
    给定若干个字符串,不定数量,每行一个。有些字符串可能出现了多次。如果读入一个字符串后,发现这个字符串以前被读入过,则这个字符串被称为前面相同的字符串的复读,这个字符串被......
  • Hive学习笔记:字符串拼接
    工作中需要合并区号与号码,因两个字段均为数值,无法直接使用“+”进行拼接,需要通过其他方法。一、concat拼接concat将多个字段(字段类型可不相同)拼接起来。使用语法为:-......
  • C# 字符串转二进制 十进制转二进制 十六进制转二进制 补位
    最近项目的协议需要根据传过来的十六进制字符串转换成二进制来判断设备状态。例如:"00"=>00表示设备1关、设备2关“01”=>01表示设备1关、设备2开“02”=>10表......
  • 【C语言进阶】三.字符串函数
    (一)字符串函数1.strlen(计算字符串元素数)(1)用法size_tstrlen(constchar*str)字符串已经'\0'作为结束标志,strlen函数返回的是在字符串中'\0'前面出现的字符个数(不包......
  • python3-基础篇-10-字符串
      字符串操作在​​python3-基础篇-04-字符串格式化输出(%、format())​​中已经提到了一些,在本章中将列举字符串的其它操作。1.字符串重复输出‘值’*num   (num为重复......
  • 反转字符串中的单词 同构字符串 验证回文串
    151.反转字符串中的单词s=s.trim();先清除前后空格String[]sb=s.split("");StringBuilderans=newStringBuilder();for(inti=sb.length-1;i>0;i--)......
  • sed 替换字符串和ip ([a-z]+) [0-9.]+
    [root@k8s-master01~]#cataa1.txtaaaabbbcccjfdjkasdfghjzxcvbqwertyuiophelloword[root@k8s-master01~]#sed-nr's#he(.*)rd#\1#gp'aa1.txtllowo[root@k......
  • vba解析JSON字符串
    vba解析JSON字符串vba解析JSON大概有4种方法1、htmlfile对象解析json(支持32位和64位系统)思路:创建htmlfile对象,使用write方法写入浏览器版本,创建parentwindow对象,在使用e......
  • [oeasy]python0017_解码_decode_字节序列_bytes_字符串_str
    ​ 解码decode回忆上次内容code就是码最早也指电报码后来有各种编码、密码、砝码、条码都指的是把各种事物编个号encode就是编码编码就是给事物编个号......
  • 解码方法 二进制求和 找出字符串中第一个匹配项的下标 罗马数字转整数
    91.解码方法intn=s.length();s=""+s;加上一个空格,防止前置零和越界char[]ch=s.toCharArray();int[]dp=newint[n+1];dp[0]=1;for(inti=1;i<......