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字典树就是就是将一些树用二进制放到一个树上这样可以方便对整体异 ...
随机推荐
- 朱晔和你聊Spring系列S1E8:凑活着用的Spring Cloud(含一个实际业务贯穿所有组件的完整例子)
本文会以一个简单而完整的业务来阐述Spring Cloud Finchley.RELEASE版本常用组件的使用.如下图所示,本文会覆盖的组件有: Spring Cloud Netflix Zuul网关 ...
- 基于node.js的博客搭建
一个博客应当具备哪些功能? 前台展示 点击下一页,可以点击分类导航. 可以点击进入到具体博文页面 下方允许评论.显示发表时间.允许留言分页. 右侧有登录注册界面. 后台管理 管理员账号:登陆后看到页面 ...
- OO博客作业3:第9-11周作业总结
一.总结介绍规格化设计的大致发展历史和为什么得到了人们的重视 1.规格化设计的大致发展历史 规格化设计,又称契约式设计,最早由Bertrand Meyer于1986年提出,出自于<面向对象软件构 ...
- Vue之小入门
Vue之小入门 <div id="app">{{ greeting }}</div> <script> let oDiv = document. ...
- CMMI摘要
CMMI_百度百科https://baike.baidu.com/item/CMMI CMMI分为哪几个等级?CMMI等级介绍_百度经验https://jingyan.baidu.com/articl ...
- Eclipse Todo Tasks 任务试图
java - Find TODO tags in Eclipse - Stack Overflowhttps://stackoverflow.com/questions/16903046/find-t ...
- react的项目坑
首先在构造页面时 应该将页面的结构分析好. 在处理数据异步时 将数据结构进行完全的简单结构化. 使用redux时 注意返回的数据是深拷贝还是浅拷贝 否则会产生 数组不为空但是没有值的问题 使用自制数据 ...
- IdentityServer4【QuickStart】之使用asp.net core Identity
使用asp.net core Identity IdentityServer灵活的设计中有一部分是可以将你的用户和他们的数据保存到数据库中的.如果你以一个新的用户数据库开始,那么,asp.net co ...
- bnu——GCD SUM (莫比乌斯反演)
题目:GCD SUM 题目链接:http://www.bnuoj.com/v3/problem_show.php?pid=39872 算法:莫比乌斯反演.优化 #include<stdio.h& ...
- Eclipse中修改jsp、html……的编码格式
一般如果使用的是Eclipse的默认编码格式,在我们保存的时候会提示选择保存的编码格式,保存后英文没有问题,但是中文就会乱码. 修改方式是: Windows——>Preferences——> ...