hdu2846(2009多校第四场) 字典树
明明就是个简单的字典树,我不过就是想复习一下尼玛被自己坑死了T^T
把字符串分解那儿写错了,检查了半天没找到错误,然后以为被卡数组内存,难过的学习字典树的指针写法。。
发现还是不对,大半夜突然看到自己傻乎乎的错误顿时感觉好傻逼啊啊啊!!
字典树数组写法:
1 #include<stdio.h> 2 #include<string.h> 3 int flag[500005],count[500005],sz; 4 int ch[500005][30]; 5 char s[25]; 6 void insert(char *s,int v) 7 { 8 int u=0,n=strlen(s),i,c; 9 for (i=0;i<n;i++) 10 { 11 c=s[i]-'a'; 12 if (!ch[u][c]) 13 { 14 flag[++sz]=v; 15 count[sz]=1; 16 ch[u][c]=sz; 17 } 18 else if (flag[ch[u][c]]!=v) 19 { 20 count[ch[u][c]]++; 21 flag[ch[u][c]]=v; 22 } 23 u=ch[u][c]; 24 } 25 return; 26 } 27 int find(char *s) 28 { 29 int i,u=0,len=strlen(s),c; 30 for (i=0;i<len;i++) 31 { 32 c=s[i]-'a'; 33 if (!ch[u][c]) return 0; 34 u=ch[u][c]; 35 } 36 return count[u]; 37 } 38 int main() 39 { 40 int n,i,len,j; 41 while (~scanf("%d",&n)) 42 { 43 sz=0; 44 memset(ch,0,sizeof(ch)); 45 memset(count,0,sizeof(count)); 46 for (i=1;i<=n;i++) 47 { 48 scanf("%s",s); 49 len=strlen(s); 50 for (j=0;j<len;j++) 51 insert(s+j,i); 52 } 53 scanf("%d",&n); 54 for (i=1;i<=n;i++) 55 { 56 scanf("%s",s); 57 printf("%d\n",find(s)); 58 } 59 } 60 return 0; 61 }
View Code
指针写法:
1 #include<stdio.h> 2 #include<string.h> 3 struct tree{ 4 struct tree *son[26]; 5 int count,flag; 6 }*root; 7 void insert(char *s,int v) 8 { 9 int len=strlen(s),i,j,c; 10 tree *cur=root,*next; 11 for (i=0;i<len;i++) 12 { 13 c=s[i]-'a'; 14 if (cur->son[c]!=NULL) cur=cur->son[c]; 15 else 16 { 17 next=new(tree); 18 for (j=0;j<26;j++) 19 next->son[j]=NULL; 20 next->count=0; next->flag=-1; 21 cur->son[c]=next; 22 cur=next; 23 } 24 if (cur->flag!=v) 25 { 26 cur->count++; 27 cur->flag=v; 28 } 29 } 30 return; 31 } 32 int find(char *s) 33 { 34 int i,len=strlen(s),c; 35 tree *cur=root; 36 for (i=0;i<len;i++) 37 { 38 c=s[i]-'a'; 39 if (cur->son[c]==NULL) break; 40 cur=cur->son[c]; 41 } 42 if (i<len) return 0; 43 return cur->count; 44 } 45 int main() 46 { 47 int n,i,len,j,m; 48 char s[25],st[25]; 49 while (~scanf("%d",&n)) 50 { 51 root=new(tree); 52 for (i=0;i<26;i++) 53 root->son[i]=NULL; 54 root->count=0; root->flag=-1; 55 for (i=1;i<=n;i++) 56 { 57 scanf("%s",s); 58 len=strlen(s); 59 for (j=0;s[j];j++) 60 { 61 // memcpy(st,s+j,len-j); 62 insert(s+j,i); 63 } 64 } 65 scanf("%d",&m); 66 for (i=1;i<=m;i++) 67 { 68 scanf("%s",s); 69 printf("%d\n",find(s)); 70 } 71 } 72 return 0; 73 }
View Code
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2846
转载于:https://www.cnblogs.com/xiao-xin/articles/4166245.html
hdu2846(2009多校第四场) 字典树相关推荐
- hdu2852(2009多校第四场) 树状数组求区间第k大的数 两种方法
二分查找n*logn*logn 比较容易理解 1 #include<stdio.h> 2 #include<string.h> 3 #include<algorithm& ...
- hdu2847(2009多校第四场) 01串添加最少01使被k整除(暴力)
要知道k倍数最多到2^20,然后暴力枚举On判断就好啦! 1 #include<stdio.h> 2 #include<string.h> 3 #include<algo ...
- 2019牛客多校第四场 I题 后缀自动机_后缀数组_求两个串de公共子串的种类数
目录 求若干个串的公共子串个数相关变形题 对一个串建后缀自动机,另一个串在上面跑同时计数 广义后缀自动机 后缀数组 其他:POJ 3415 求两个串长度至少为k的公共子串数量 @(牛客多校第四场 I题 ...
- 2018 HDU多校第四场赛后补题
2018 HDU多校第四场赛后补题 自己学校出的毒瘤场..吃枣药丸 hdu中的题号是6332 - 6343. K. Expression in Memories 题意: 判断一个简化版的算术表达式是否 ...
- 牛客多校第四场【B-Basic Gcd Problem】
牛客多校第四场[B-Basic Gcd Problem] 题目链接:https://ac.nowcoder.com/acm/contest/5669/B 思路:先要理解公式,多看几个数据基本就会有点想 ...
- 2022 年牛客多校第四场补题记录
A Task Computing 题意:给定长度为 nnn 的序列 {(wi,pi)}\{(w_i,p_i)\}{(wi,pi)},从中选出 mmm 项并重新排列得到子序列 {a1,a2,⋯,am ...
- hdu 4639 2013多校第四场 hehe Fibonacci 数列,组合计数,字符串处理
题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=4639 题目思路: 首先我们取出所有he这样的东西,考察连续的k个"he"串,通过找 ...
- 杭电多校第四场-H- K-th Closest Distance
题目描述 You have an array: a1, a2, , an and you must answer for some queries. For each query, you are ...
- 2014多校第四场1006 || HDU 4902 Nice boat (线段树 区间更新)
题目链接 题意 : 给你n个初值,然后进行两种操作,第一种操作是将(L,R)这一区间上所有的数变成x,第二种操作是将(L,R)这一区间上所有大于x的数a[i]变成gcd(x,a[i]).输出最后n个数 ...
最新文章
- 行为模式之Iterator模式
- python 开运算_形态学去噪python(开运算,闭运算)
- 4万字长文ClickHouse应用实战-物化视图在微信的实践
- 最长上升子序列问题 (LIS)
- 【线上分享】RTC业务中的视频编解码引擎构建
- idea使用svn拉取项目代码_IntelliJ IDEA 14 拉取SVN maven 多模块项目 部署tomcat 详细图解!...
- 上一页下一页_多页PDF文件也能很快合为一页PDF文件?这个小技巧可以办到
- 刑事科学技术专业与计算机专业,辽宁警察学院刑事科学技术专业
- 数组 spark_spark——rdd常用的转化和行动操作
- 简单的c语言游戏编程打地鼠,少儿创意编程scratch初级游戏--打地鼠
- 苹果a7处理器_苹果历代cpu性能对比
- 李白的藏头诗鸿蒙圣安卓,李白藏头诗生成器
- vscode配置运行php项目完整版
- 国内TCP单边 加速 的 正确 做法
- 第九篇:万丈高楼平地起-驱动编程基础知识点
- git使用进阶(一)——工作区和log
- 刚生了宝宝后需要及时办理的6个证件
- 【工程数学】若干种解高次方程的算法
- (附源码)ssm高校实验室 毕业设计 800008
- 远程命令执行漏洞与远程代码执行漏洞33333