HDU 2846 Repository(字典树,标记)
字典树,注意初始化的位置~!!位置放错,永远也到不了终点了org。。。。
我是用数组模拟的字典树,这就要注意内存开多少了,,要开的不大不小刚刚好真的不容易啊。。。。
我用了val来标记是否是同一个串分解而来的,保存的是串的编号
num记录数目。
- //string &replace(iterator first0, iterator last0,const_iterator first, const_iterator last);
- //把[first0,last0)之间的部分替换成[first,last)之间的字符串
- #include<iostream>
- #include<cstdio>
- #include<list>
- #include<algorithm>
- #include<cstring>
- #include<string>
- #include<queue>
- #include<stack>
- #include<map>
- #include<vector>
- #include<cmath>
- #include<memory.h>
- #include<set>
- using namespace std;
- #define ll __int64
- int pos;
- struct tt
- {
- int val,arr[],num;
- tt(){
- val=-,num=;
- memset(arr,-,sizeof(arr));
- }
- }a[]; //用数组模拟的字典树开的内存大小也是一个技术活,太大超内存,太小runtime errer。。
- void insert(char *s,int val,int id,int d)
- {
- if(s[d]=='\0')return;
- int t=s[d]-'a';
- if(a[id].arr[t]==-)
- a[id].arr[t]=++pos;
- id=a[id].arr[t];
- if(a[id].val!=val)
- {
- a[id].val=val;
- a[id].num++;
- }
- insert(s,val,id,d+);
- }
- int solve(char *s,int id)
- {
- int ans=;
- int len=strlen(s);
- for(int i=;i<len;i++)
- {
- int t=s[i]-'a';
- if(a[id].arr[t]==-)
- return ;
- else
- id=a[id].arr[t];
- }
- return a[id].num;
- }
- int main()
- {
- int t;
- pos=;//注意初始化的位置
- scanf("%d",&t);
- while(t--)
- {
- char s[];
- scanf("%s",s);
- int len=strlen(s);
- for(int i=;i<len;i++)
- {
- insert(s+i,t,,);
- }
- }
- int n;
- scanf("%d",&n);
- while(n--)
- {
- char s[];
- scanf("%s",s);
- int ans=solve(s,);
- printf("%d\n",ans);
- }
- return ;
- }
HDU 2846 Repository(字典树,标记)的更多相关文章
- HDU 2846 Repository (字典树 后缀建树)
Repository Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Total ...
- hdu 2846 Repository (字典树)
RepositoryTime Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total S ...
- hdu 2846(字典树)
Repository Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total ...
- HDU 2846 Repository(字典树,每个子串建树,*s的使用)
Repository Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total ...
- HDU 2846 Repository(字典树)
字典树较为复杂的应用,我们在建立字典树的过程中需要把所有的前缀都加进去,还需要加一个id,判断它原先是属于哪个串的.有人说是AC自动机的简化,但是AC自动机我还没有做过. #include<io ...
- hdu 2846 Repository
http://acm.hdu.edu.cn/showproblem.php?pid=2846 Repository Time Limit: 2000/1000 MS (Java/Others) ...
- hdu 1979 DFS + 字典树剪枝
http://acm.hdu.edu.cn/showproblem.php?pid=1979 Fill the blanks Time Limit: 3000/1000 MS (Java/Others ...
- HDU 1671 (字典树统计是否有前缀)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1671 Problem Description Given a list of phone number ...
- hdu2846 Repository 字典树(好题)
把每个字符串的所有子串都加入字典树,但在加入时应该注意同一个字符串的相同子串只加一次,因此可以给字典树的每个节点做个记号flag--表示最后这个前缀是属于那个字符串,如果当前加入的串与它相同,且二者属 ...
随机推荐
- 在WPF中调用Winform控件
最近在项目中用到了人脸识别和指纹识别,需要调用外部设备和接口,这里就用到了在WPF中调用Winform控件. 第一步,添加程序集引用.System.Windows.Forms和WindowsForms ...
- 【转】Hibernate入门实例
1. 环境配置 1.1 hiberante环境配置 hibernate可实现面向对象的数据存储.hibernate的官网:http://hibernate.org/ 官网上选择hibernate OR ...
- spring 基本操作总结主要是aop以及依赖注入的基本配置
一所需架包 spring commom-logging.jar spring.jar 注解 common-annotation.jar aop面向切面 aspectjrt.jar aspect ...
- ZygoteInit 相关分析
上一篇文章我们已经分析到调用com.android.internal.os.ZygoteInit类的main函数. 今天分析一下com.android.internal.os.ZygoteInit类的 ...
- dede 忘记密码在数据库中修改方法
如何找回或修改dedecms后台管理员登录密码呢? 一个客户把密码忘了,找了很长一会没几个靠谱的回答,dede是使用md5加密,但是,它是显示32位md5加密码从第6位开始的20位 方法是直接修改其m ...
- qu
离骚 (3481人评分) 8.5 朝代:先秦 作者:屈原 原文: 帝高阳之苗裔兮,朕皇考曰伯庸.摄提贞于孟陬兮,惟庚寅吾以降.皇览揆余初度兮,肇锡余以嘉名:名余曰正则兮,字余曰灵均.纷吾既有此内美 ...
- MVC4.0 利用IActionFilter实现单一Action返回多种结果
延续MVC4.0 实现单一Action返回多种结果,我们实现了在一个Action中根据前台请求方式的不同和请求内容的不同返回了多个结果,但是这种返回多个结果的业务逻辑并不通用.如果现在年纪Action ...
- 条款9:不要在构造和析构过程中调用virtual函数
如下是一个股票交易的例子: class Transaction // 交易的基类 { public: Transaction(); ; // 用于记录交易日志 }; Transaction::Tran ...
- UIToolbar swift
// // ViewController.swift // UILabelTest // // Created by mac on 15/6/23. // Copyright (c) 2015年 fa ...
- VS2013中常用的一些快捷键
1.编辑时需要前后文切换: 需要自己设置为:ctrl+alt +方向键,向前查看,设置为右方向键,向后查看,设置为左方向键 依次选择:工具->选项->环境->键盘-> 2.查看 ...