HDU1075-What Are You Talking About
What Are You Talking About
Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 102400/204800 K (Java/Others)
Total Submission(s): 20751 Accepted Submission(s): 6881
him?
two strings, the first one is a word in English, the second one is the corresponding word in Martian's language. A line with a single string "END" indicates the end of the directory part, and this string should be ignored. The book part starts with a single
line contains a string "START", this string should be ignored, then an article written in Martian's language. You should translate the article into English with the dictionary. If you find the word in the dictionary you should translate it and write the new
word into your translation, if you can't find the word in the dictionary you do not have to translate it, and just copy the old word to your translation. Space(' '), tab('\t'), enter('\n') and all the punctuation should not be translated. A line with a single
string "END" indicates the end of the book part, and that's also the end of the input. All the words are in the lowercase, and each word will contain at most 10 characters, and each line will contain at most 3000 characters.
START
from fiwo
hello difh
mars riwosf
earth fnnvk
like fiiwj
END
START
difh, i'm fiwo riwosf.
i fiiwj fnnvk!
END
hello, i'm from mars.
i like earth!HintHuge input, scanf is recommended.
<span style="font-size:18px;">
#include<iostream>
#include<algorithm>
#include<string>
#include<cstdio>
#include<cmath>
#include<cstring>
using namespace std; const int MAXN = 26;
const int MAXM = 15;
const int MAXS = 3005; struct Trie//名字不用起多,按书上的写太累赘
{
char s[MAXM];
Trie *next[MAXN];
};
Trie *root;//紧随其后,声明一个 void init()
{
root = (Trie*)malloc(sizeof(Trie));
strcpy(root->s, "");
for (int i = 0; i<MAXN; i++)
{
root->next[i] = NULL;
}
} void CreateTire(char str[], char ss[])//不许要传整棵树了
{
//这里需要p来对roor进行操作,因为会有迭代过程
//如果root参与运算的话,root=root->next[i],root的值就被改变了
Trie *p = root, *temp;
int len = strlen(ss);
for (int i = 0; i<len; i++)
{
int id = ss[i] - 'a';
if (p->next[id] == NULL)//说明还没有访问过
{
//对临时temp进行初始话,同root的初始化一样
temp = (Trie*)malloc(sizeof(Trie));
strcpy(temp->s, "");
for (int j = 0; j<MAXN; j++)
{
temp->next[j] = NULL;
}
p->next[id] = temp;
p = p->next[id];
}
else//访问过继续向下走
{
p = p->next[id];
}//到最后了,把需要翻译的字符串拷贝进来
if (i == len - 1)
{
strcpy(p->s, str);
}
}
//建树成功
} string FindTrie(char ss[])//写string,不要写成char*,会返回地址
{
string ans = "";
Trie *p = root;
int len = strlen(ss);
for (int i = 0; i<len; i++)
{
int id = ss[i] - 'a';
if (p->next[id] == NULL)
{
ans = "";//没有的话就把空串拷贝进去
return ans;
}
else
{
p = p->next[id];//有的话继续向下
}
}
//假设ss对应的没有保存,因为ss可能是另外一个的前缀,这个时候p->next[id]也不为空
//但是拷贝进来的还是空串,不用担心
ans = (string)p->s;
return ans;
} void getData()
{
char s[MAXM];
scanf("%s", s);//先把start读进来
while (~scanf("%s", s))
{
if (s[0] == 'E')//读到end退出
break;
char ss[MAXM];
scanf("%s", ss);
CreateTire(s, ss);
}
} void slove()
{
string s;//因为整行读取还是string方便
cin >> s;
getline(cin, s);
while (getline(cin, s))
{
if (s[0] == 'E')
break;
int st;//开始结束的下标
st = 0;
string res = "";
s += ".";//末尾加一个不是小写字母的字符方便处理
int len = s.length();
for (int i = 0; i<len; i++)
{
if (s[i]>'z'||s[i]<'a')//不属于小写字母,逻辑或的关系
{
char temp[MAXM];
int index = 0;
for (int j = st; j<i; j++)
{
temp[index] = s[j];
index++;
}
temp[index] = '\0';//'\0'结尾
string ss = FindTrie(temp);
if (ss=="")//是空串
{
res += (string)temp;//保留原值追加
}
else
{
res += ss;
}
//寻找下一个小写字母开头的位置赋值st
st = i;
while (s[i]>'z'||s[i]<'a'&&i<len-1)
{
i++;
}
index = 0;
//把中间不是小写字符的字符串原值保留
for (int j = st; j < i; j++)
{
temp[index] = s[j];
index++;
}
temp[index] = '\0';
res += (string)temp;
st = i; }
}
cout << res << endl;
}
delete(root);
}
int main()
{
init();
getData();
slove();
return 0;
}
</span>
HDU1075-What Are You Talking About的更多相关文章
- HDU1075
题目大意: 给你一本火星词典,每个火星单词对应一个英文单词. 然后给你一篇火星文章,要求你翻译成英文. 要求如下: 如果这个火星单词用英文单词可以表示,就翻译成英文,如果没有这个单词,就原样输出.遇到 ...
- HDU1075 - What Are You Talking About(Trie树)
题目大意 给定一些火星文单词以及对应的英语单词,然后给你一些火星文,要求你翻译成对应的英文 题解 第一次写Trie树! 把所有火星文单词插入到Trie树中,并且每个火星文单词结尾的节点记录相应英文单词 ...
- HDU1075 字典树板子题
题意 :给出两组字符串 一一映射,给出一种组成的文字,要求映射成另外一种思路:使用字典树,把映射的另外一个字符存在字典树的单词节点处 例如 abc 123 则把123存在abc节点中的c处即可 ...
- (map)What Are You Talking About hdu1075
What Are You Talking About Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 102400/204800 K ...
- What Are You Talking About HDU1075
一开始我也想用map 但是处理不好其他字符.. 看了题解 多多学习! 很巧妙 就是粗暴的一个字符一个字符的来 分为小写字母和非小写字母两个部分 一但单词结束的时候就开始判断. #includ ...
- HDU1075 字典树 + 字符串映射
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1075 ,字典树的字符串映射. 题意是给你每个火星文单词对应的英语,然后让你把一篇火星文文章给翻译成英语 ...
- HDU1075 What Are You Talking About(map)
传送门 题目大意:一个单词对应另一个单词 翻译一段文字 题解:stl map走一波 代码: #include<iostream> #include<map> #include& ...
- ACM训练计划建议(写给本校acmer,欢迎围观和指正)
ACM训练计划建议 From:freecode# Date:2015/5/20 前言: 老师要我们整理一份训练计划给下一届的学弟学妹们,整理出来了,费了不少笔墨,就也将它放到博客园上供大家参考. 菜 ...
- Trie树入门及训练
什么叫Trie树? Trie树即字典树. 又称单词查找树,Trie树,是一种树形结构,是一种哈希树的变种.典型应用是用于统计,排序和保存大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本 ...
- OJ题目分类
POJ题目分类 | POJ题目分类 | HDU题目分类 | ZOJ题目分类 | SOJ题目分类 | HOJ题目分类 | FOJ题目分类 | 模拟题: POJ1006 POJ1008 POJ1013 P ...
随机推荐
- 在centos6编译安装http-2.4
在centos6 编译安装httpd-2.4 安装httpd-2.4 Ü 依赖于apr-1.4+, apr-util-1.4+, [apr-iconv] Ü apr: : apache portabl ...
- idea tomee required to support ear ejb deployment问题
先删掉原来的uname,然后添加项目即可
- solr安装血泪史
Windows10专业版,solr6.5.1,tomcat8.5.14,jdk1.8 转自http://www.jianshu.com/p/dd7a59b3f0b5 科普篇 来自百度百科:Solr简介 ...
- css响应式布局
以设计稿为准,假设设计稿竖屏宽度为750px,取根元素的font-size为50px 在iphone6(375px)下,deviceWidth=7.5rem, 这个就是viewPort中的device ...
- ⑤bootstrap表格使用基础案例
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 【框架学习与探究之日志组件--Log4Net与NLog】
前言 本文欢迎转载,作者原创地址:http://www.cnblogs.com/DjlNet/p/7604340.html 序 近日,天气渐冷,懒惰的脑虫又开始作祟了,导致近日内功修炼迟迟未能进步,依 ...
- 一起写框架-Ioc内核容器的实现-基础功能-ComponentScan支持多包扫描(六)
实现功能 1.我们看到@ComponentScan注解一个开始定义就是需要支持,扫描多个包,将多个包的类名获取到.现在就实现这个功能. 实现思路 根据传入的字符串数组,获得多个包下的类全限制名. 实现 ...
- 巧用ecshop做淘宝客
一.第一步 下载文件,可以在http://www.ecshop.com/下载ecshop各个版本的安装包,安装好ECSHOP,然后通过PTF工具下载2个文件到本地进行修改.这个2个文件分别是goods ...
- Oracle的Recyclebin策略
1.从oracle10g开始删除数据库表的时候并不是真正删除,而是放到了recyclebin中,这个过程类似 windows里面删除的文件会被临时放到回收站中. 2.删除的表系统会自动给他重命名就是你 ...
- RabbitMQ的简单应用
虽然后台使用了读写分离技术,能够在一定程度上抗击高并发,但是如果并发量特别巨大时,主数据库不能同时处理高并发的请求,这时数据库容易宕机. 问题: 现在的问题是如何既能保证数据库正常运行,又能实现用户数 ...