hdu 2846(字典树)
Repository
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)
Total Submission(s): 5048 Accepted Submission(s): 1739
you go shopping, you can search in repository for avalible merchandises
by the computers and internet. First you give the search system a name
about something, then the system responds with the results. Now you are
given a lot merchandise names in repository and some queries, and
required to simulate the process.
is only one case. First there is an integer P
(1<=P<=10000)representing the number of the merchanidse names in
the repository. The next P lines each contain a string (it's length
isn't beyond 20,and all the letters are lowercase).Then there is an
integer Q(1<=Q<=100000) representing the number of the queries.
The next Q lines each contains a string(the same limitation as foregoing
descriptions) as the searching condition.
- #include<iostream>
- #include<cstdio>
- #include<cmath>
- #include<cstring>
- #include<algorithm>
- #include<queue>
- #include<map>
- #include<set>
- #include<vector>
- #include<cstdlib>
- #include<string>
- #define eps 0.000000001
- typedef long long ll;
- typedef unsigned long long LL;
- using namespace std;
- struct tire{
- int id,num;
- tire *next[];
- };
- tire *root;
- void insert(char *s,int k){
- tire *p,*q;
- p=root;
- int len=strlen(s);
- for(int i=;i<len;i++){
- //cout<<3<<endl;
- int t=s[i]-'a';
- if(p->next[t]==NULL){
- q=(tire *)malloc(sizeof(tire));
- for(int j=;j<;j++)q->next[j]=NULL;
- q->num=;
- q->id=-;
- p->next[t]=q;
- }
- p=p->next[t];
- if(p->id!=k){
- p->id=k;
- p->num++;
- }
- }
- }
- int find(char *s){
- tire *p=root;
- int len=strlen(s);
- for(int i=;i<len;i++){
- int t=s[i]-'a';
- if(p->next[t]==NULL)return ;
- else
- p=p->next[t];
- }
- return p->num;
- }
- int main(){
- int m,n;
- char str[];
- root=(tire *)malloc(sizeof(tire));
- for(int i=;i<;i++)root->next[i]=NULL;
- root->id=-;
- root->num=;
- scanf("%d",&n);
- for(int i=;i<n;i++){
- scanf("%s",str);
- int len=strlen(str);
- for(int j=;j<len;j++){
- //cout<<1<<endl;
- insert(str+j,i);//cout<<2<<endl;
- }
- }
- scanf("%d",&m);
- while(m--){
- scanf("%s",str);
- cout<<find(str)<<endl;
- }
- }
接下来是一个静态的字典树(节省内存) c++ g++都可以过
- #include<iostream>
- #include<cstdio>
- #include<cmath>
- #include<cstring>
- #include<algorithm>
- #include<queue>
- #include<map>
- #include<set>
- #include<vector>
- #include<cstdlib>
- #include<string>
- #define maxnode 500000
- #define sigma_size 30
- #define eps 0.000000001
- typedef long long ll;
- typedef unsigned long long LL;
- using namespace std;
- int ch[maxnode][sigma_size];
- int val[maxnode];
- int flag[maxnode];
- int sz;
- void init(){
- memset(ch[],,sizeof(ch[]));
- sz=;
- }
- int idx(char c){
- return c-'a';
- }
- void insert(char *s,int k){
- int u=;
- int len=strlen(s);
- for(int i=;i<len;i++){
- int c=idx(s[i]);
- if(ch[u][c]==){
- memset(ch[sz],,sizeof(ch[sz]));
- val[sz]=;
- ch[u][c]=sz++;
- }
- u=ch[u][c];
- if(flag[u]!=k){
- val[u]++;
- flag[u]=k;
- }
- }
- }
- int find(char *s){
- int u=;
- int len=strlen(s);
- for(int i=;i<len;i++){
- int c=idx(s[i]);
- if(ch[u][c]==)return ;
- u=ch[u][c];
- }
- return val[u];
- }
- int main(){
- int m,n;
- init();
- memset(flag,-,sizeof(flag));
- //for(int i=0;i<10;i++)cout<<flag[i]<<" ";
- char str[];
- scanf("%d",&n);
- for(int i=;i<n;i++){
- scanf("%s",str);
- int len=strlen(str);
- for(int j=;j<len;j++){
- //cout<<1<<endl;
- insert(str+j,i);//cout<<2<<endl;
- }
- }
- scanf("%d",&m);
- while(m--){
- scanf("%s",str);
- cout<<find(str)<<endl;
- }
- }
hdu 2846(字典树)的更多相关文章
- Repository HDU - 2846 字典树
题意:给出很多很多很多很多个 单词 类似搜索引擎一下 输入一个单词 判断有一个字符串包含这个单词 思路:字典树变体,把每个单词的后缀都扔字典树里面,这里要注意dd是一个单词 但是把d 和dd都放字典树 ...
- hdu 2846 字典树变形
mark: 题目有字串匹配的过程 有两点 1.为了高效的匹配子串 可以把所有的子串都预处理进去 然后字典树计数就放在最后面 2.在同一个母串处理自串的时候 会有重复的时候 比如abab 这里去重用个 ...
- HDU 5687 字典树插入查找删除
题目:http://acm.hdu.edu.cn/showproblem.php?pid=5687 2016百度之星资格赛C题,直接套用字典树,顺便巩固了一下自己对字典树的理解 #include< ...
- HDU 5384 字典树、AC自动机
题目:http://acm.hdu.edu.cn/showproblem.php?pid=5384 用字典树.AC自动机两种做法都可以做 #include<stdio.h> #includ ...
- hdu 2112(字典树+最短路)
HDU Today Time Limit: 15000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total ...
- hdu 2072(字典树模板,set,map均可做)
地址:http://acm.hdu.edu.cn/showproblem.php?pid=2072 lily的好朋友xiaoou333最近很空,他想了一件没有什么意义的事情,就是统计一篇文章里不同单词 ...
- Chip Factory HDU - 5536 字典树(删除节点|增加节点)
题意: t组样例,对于每一组样例第一行输入一个n,下面在输入n个数 你需要从这n个数里面找出来三个数(设为x,y,z),找出来(x+y)^z(同样也可以(y+z)^1)的最大值 ("^&qu ...
- hdu 1251 字典树的应用
这道题看了大神的模板,直接用字典树提交的会爆内存,用stl 里的map有简单有快 #include <iostream> #include <map> #include < ...
- hdu 2896 字典树解法
#include <iostream> #include <cstring> #include <cstdio> #include <cstdlib> ...
- Phone List HDU - 1671 字典树
题意:给出一堆一组一组的数字 判断有没有哪一个是另外一个的前缀 思路:字典树 插入的同时进行判断 不过 当处理一组数字的时候 需要考虑的有两点1.是否包含了其他的序列2.是否被其他序列包含 刚开始 ...
随机推荐
- redis集群——RPLR简笔(Redis+PostgreSQL+Linux(centos7)+RabbitMQ)
使用的是centos7. 1.下载最新redis源码,解压(2016-05-12最新版本为3.2.0,3.0及以上才有官方集群) 2.进入源码根目录(此目录下的redis-stable目录),找到ut ...
- POJ_3013_最短路
Big Christmas Tree Time Limit: 3000MS Memory Limit: 131072K Total Submissions: 23630 Accepted: 5 ...
- sql日期提取
--插入数据修改不行:必须提供学号 insert into Student(生日类型) values('阳历') --把月份提取出来 显示两位数 select DATENAME(month,getda ...
- Java单元测试 - TestNG
官网 Eclipse安装TestNG插件 与Junit相比 从Junit发展而来,开发者就是Junit小组的一个人 Test Suite不再需要硬编码,就像cf自动登录的脚本中一样,可以写到一个xml ...
- pandas操作,按序号取列,按条件筛选,df格式转换等
这几天遇到比较多的dataframe操作,频繁使用,在此整理记录下,方便查找. 1.num为列的数字序号,name=df.columns[num],返回的是column的字符串名字,df[name]= ...
- linux 的sed命令解释 sed ':t;N;s/\n/,/;b t' 将换行符换成逗号
linux 的sed命令解释 sed ':t;N;s/\n/,/;b t' 将换行符换成逗号 实现的功能是吧换行符换成逗号了,自己试验过. 求解释,:t N b t 都是什么意思??? :t 定义la ...
- uva1584 Circular Sequence(Uva-1584)
vj:https://vjudge.net/problem/UVA-1584 这个题讲的是一个圆环,圆环上面有一堆字母,找出字典序最小的那一圈 这个题我觉得直接用c语言的strcmp那一套感觉真是用不 ...
- 在Python脚本中调用Django环境(方便、右键运行,可用于ORM测试)
随便创建一个py文件即可: import os if __name__ == '__main__': os.environ.setdefault("DJANGO_SETTINGS_MODUL ...
- 使用Python PIL库中的Image.thumbnail函数裁剪图片
今天,是我来到博客园的第五天,发现自己还没有头像,想着上传ubuntu系统中我很喜欢的一个背景图片来当头像,但是因为图片过大,上传失败了.那么,我们如何使用python中强大的PIL库来进行图片裁剪呢 ...
- 8 pandas模块,多层索引
1 创建多层索引 1)隐式构造 最常见的方法是给DataFrame构造函数的index参数传递两个或更多的数组 · Series也可以创建多层索引 ...