HDU1075 字典树板子题
题意 :给出两组字符串 一一映射,给出一种组成的文字,要求映射成另外一种
思路:使用字典树,把映射的另外一个字符存在字典树的单词节点处 例如 abc 123
则把123存在abc节点中的c处即可
同时这里使用的是静态的数组,操作和写起来都更方便,就是要提前判断开的空间,过大过小都会有莫名其妙的错误
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const int maxn=5e5+;
const int size=;
struct Trie{
int ch[maxn][size];
char str[maxn][];
bool isEnd[maxn];
int size;
void init(){
size=;
memset(ch,,sizeof(ch));
memset(isEnd,,sizeof(isEnd));
}
int index(char s){
return s-'a';
}
void insert(char*s1,char*s2){
int i,rt;
for(i=rt=;s1[i]!='\0';i++){
int c=index(s1[i]);
if(ch[rt][c]==){
ch[rt][c]=size++;
}
rt=ch[rt][c];
}
strcpy(str[rt],s2);
isEnd[rt]=;
}
const char*find(char*s){
int i,rt;
for(i=rt=;s[i]!='\0';i++){
int c=index(s[i]);
if(!ch[rt][c])return "";
rt=ch[rt][c];
}
return (isEnd[rt])?str[rt]:""; }
}trie;
char s1[maxn],s2[maxn];
int main(){
trie.init();
while(scanf("%s",s1)==){
if(!strcmp(s1,"START"))continue;
if(!strcmp(s1,"END"))break;
scanf("%s",s2);
trie.insert(s2,s1);
}
//cout<<111<<endl;
getchar();
while(gets(s1)){
if(!strcmp(s1,"START"))continue;
if(!strcmp(s1,"END"))break;
int i=;
while(s1[i]!='\0'){
if(s1[i]>='a'&&s1[i]<='z'){
int j=;
while(s1[i]!='\0'&&s1[i]>='a'&&s1[i]<='z'){
s2[j++]=s1[i++];
}
s2[j]='\0';
const char*temp=trie.find(s2);
if(temp[]=='')printf("%s",s2);
else printf("%s",temp);
}
else putchar(s1[i++]);
// puts("");
}
// puts("");
cout<<endl;
}
return ;
}
HDU1075 字典树板子题的更多相关文章
- HDU1251 字典树板子题
题意:中文题,统计以某字符串作为前缀的字符串个数 刚学字典树,理解起来十分简单,就是维护一个多叉树,这里用的是链表版本,后面就用的是数组版本了,个人更喜欢数组版本,这里的链表版本就因为 莫名其妙的错误 ...
- CH 1601 - 前缀统计 - [字典树模板题]
题目链接:传送门 描述给定 $N$ 个字符串 $S_1,S_2,\cdots,S_N$,接下来进行 $M$ 次询问,每次询问给定一个字符串 $T$,求 $S_1 \sim S_N$ 中有多少个字符串是 ...
- 字典树模板题(统计难题 HDU - 1251)
https://vjudge.net/problem/HDU-1251 标准的字典树模板题: 也注意一下输入方法: #include<iostream> #include<cstdi ...
- HDU 1251 统计难题(字典树模板题)
http://acm.hdu.edu.cn/showproblem.php?pid=1251 题意:给出一些单词,然后有多次询问,每次输出以该单词为前缀的单词的数量. 思路: 字典树入门题. #inc ...
- hdu1305 字典树水题
题意: 给你一些字符串,然后问你他们中有没有一个串是另一个串的前缀. 思路: 字典树水题,(这种水题如果数据不大(这个题目不知道大不大,题目没说估计不大),hash下也行,把每个 ...
- hdu 1251 统计难题 (字典树入门题)
/******************************************************* 题目: 统计难题 (hdu 1251) 链接: http://acm.hdu.edu. ...
- hdu 1251 统计难题 字典树第一题。
统计难题 Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 131070/65535 K (Java/Others)Total Submi ...
- HDU-4825 Xor Sum,字典树好题!
Xor Sum 一遍A了之后大呼一声好(keng)题!debug了两小时~~~~百度之星资格赛,可以. 题意:给你一个n个元素的数组,m次查询,每次输入一个数k要求从数组中找到一个数与k异或值最大,输 ...
- hdu 4825 Xor Sum(01字典树模版题)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4825 题解:一到01字典树的模版题,01字典树就是就是将一些树用二进制放到一个树上这样可以方便对整体异 ...
随机推荐
- 【C# 复习总结】类、继承和接口
1 类 定义新的数据类型以及这些新的数据类型进行相互操作的方法 定义方式: class Cat { } class Cat:object { } C#中所有的类都是默认由object类派生来的,显示指 ...
- matplotlib 入门之Sample plots in Matplotlib
文章目录 Line Plot One figure, a set of subplots Image 展示图片 展示二元正态分布 A sample image Interpolating images ...
- hdu3790 dijkstra+堆优化
题目来源:http://acm.hdu.edu.cn/showproblem.php?pid=3790 分析:dijkstra没有优化的话,复杂度是n*n,优化后的复杂度是m*logm,n是顶点数,m ...
- 关于R语言中dnorm,pnorm,qnorm,rnorm的用法
dnorm,pnorm,qnorm,rnorm的表达式: 其中x和q是由数值型变量构成的向量,p是由概率构成的向量,n是随机产生的个数 mean是要计算正态分布的均值,缺省值为0,sd是计算正态分布的 ...
- vue echarts 动态数据
安装echarts依赖 npm install echarts -S 或者使用国内的淘宝镜像: 安装 npm install -g cnpm --registry=https://registry.n ...
- UIAutomatorViewer 出现错误:Unable to connect to adb
最近升级了AndroidSDK,打开UIAutomatorViewer.bat,结果发现获取不了Android设备界面上的UI信息.经过一番努力,终于把这个问题解决了,详细过程如下: 1. Unabl ...
- toTree
// js实现树级递归, // 通过js生成tree树形菜单(递归算法) const data = [ { id: 1, name: "办公管理", pid: 0 }, { id: ...
- [转帖]linux sed命令
linux sed命令就是这么简单 https://www.cnblogs.com/wangqiguo/p/6718512.html 用到的最多的就是一个sed -i 's/nn/mm/' 的命令了. ...
- 使用NFS时的一些问题
当我把nfs服务端共享目录/usr/local/data/test删掉时,在nfs客户端却没办法把之前挂载在这上面的当前从机上的/usr/local/data/test删除,出现 bash: cd: ...
- MyBaits全局配置文件的各项标签2
▲typeHandlers 类型处理器,它架起数据库和JavaBean一一映射的桥梁,这里需要注意一下,java在JDK1.8之前,日期处理函数并不丰富,但在JDK1.8之后引入JSR-310标准,这 ...