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 ...
随机推荐
- 静默获取微信用户openid如此简单,只需要一句话
页面A getopenid.php <?php /** * Created by PhpStorm. * User: sunjianyin * Date: 2017/10/7 * Time: 下 ...
- JS框架设计读书笔记之-异步
setTimeout/setInterval 1. 如果回调执行时间大于间隔时间,真正的间隔时间会大一些. 2. 存在一个最小的时间间隔,即使seTimeout(fn,0),在IE6-IE8中大概为1 ...
- webservice wsdl语法基础
XML-WSDL基础知识 WSDL 1.1. WSDL 简介 1.1.1. 概述 WSDL 指网络服务描述语言 (Web Services Description Language) WSDL ...
- Doing Homework
Doing Homework Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Subm ...
- Luck and Love(二维线段树)
Luck and Love Time Limit: 10000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Tota ...
- IdentityServer4实现Token认证登录以及权限控制
相关知识点 不再对IdentityServer4做相关介绍,博客园上已经有人出了相关的系列文章,不了解的可以看一下: 蟋蟀大神的:小菜学习编程-IdentityServer4 晓晨Master:Ide ...
- 深入分析Android动画(二)
上回书说到Android动画的分类以及基本使用,这会书主要说Android属性动画的原理,对于View动画的原理本篇不做深入分析.对于Android动画的基础请看深入分析Android动画(一) 我们 ...
- .Net 上传图片之前获取图片的宽高
Stream st = Request.Files[0].InputStream; Byte[] buffer = new Byte[st.Length]; ...
- DataProtection Key的选择
代码位于: Microsoft.AspNetCore.DataProtection.KeyManagement.DefaultKeyResolver.cs private IKey FindDefau ...
- 学习C++ 模板类
#include<iostream>#include<typeinfo>#include<cstring> using namespace std; class A ...