当前位置: 首页 > article >正文

What Are You Talking About(HDU- P1075)

伊格纳修斯真是走了狗屎运昨天居然遇到了火星人可惜他完全听不懂火星人的语言。临走时火星人给了他一本火星历史书和一本词典。现在伊格纳修斯想把这本历史书翻译成英语你能帮帮他吗输入本题只有一组测试数据包含两个部分词典部分和书籍部分。词典部分以一行字符串 START 开头这行要忽略接下来是若干行每行包含两个字符串第一个是英语单词第二个是对应的火星语单词。当遇到一行只有 END 时词典部分结束这行也要忽略。书籍部分同样以一行 START 开头忽略这行接着是一篇用火星语写的文章。你需要用词典把文章翻译成英语如果词典里有对应的单词就翻译成英语找不到的单词就原样保留。空格( )、制表符(\t)、换行符(\n)以及所有标点符号都不翻译。遇到一行只有 END 时书籍部分结束输入也结束。所有单词均为小写单词长度最多10个字符每行最多3000个字符。输出你需要输出这本历史书的英文翻译版本。示例Input复制Output复制START from fiwo hello difh mars riwosf earth fnnvk like fiiwj END START difh, im fiwo riwosf. i fiiwj fnnvk! ENDhello, im from mars. i like earth!提示输入量巨大建议使用 scanf 来读入。题目分析本题的核心诉求是实现一个海量单词的映射翻译系统。给定一部火星文到英文的词典要求将一段火星文历史书翻译成英文。题目的难点和核心约束在于文本格式的绝对保留 翻译过程中必须原封不动地保留原文本中的所有标点符号、空格、制表符和换行符。这决定了我们不能使用常规的cinstring或stringstream按空格分割来读取历史书部分否则会丢失重要的排版信息和紧贴单词的标点符号。思考过程与解题思路数据结构选择std::mapvs 字典树虽然 STL的mapstring,string或unordered_map可以快速实现映射但本题输入量巨大多达数千个单词且查表极为频繁。map的底层红黑树常数较大容易导致超时。因此采用静态数组实现的字典树是时空效率最优的解法。 建树逻辑因为要用火星文查英文所以将火星文作为树的路径进行插入在单词结束的叶子节点上存储对应的英文翻译。输入流处理切割还是逐字符遍历如果尝试先按照标点符号切割单词逻辑会非常繁琐且极易漏掉连续标点或多重空格。 最优的破局点是状态机思维逐字符读取 一段文本本质上是由“字母”和“非字母标点/空白”交替组成的。我们只需要逐个读取字符cin.get()遇到字母存入临时缓冲区拼接成火星文单词。遇到非字母说明一个单词刚刚结束。此时拿着缓冲区里的单词去字典树查询翻译并输出然后清空缓冲区最后原样输出这个非字母字符。算法设计静态字典树构建声明结构体数组tree[500000]利用全局变量天然初始化为0的特性省去memset的开销。结构体包含next[26]指向子节点、flag标记是否为单词结尾和s3存储英文释义。读入词典 通过while(cins1s2)循环读取遇到END结束。调用insert(s1, s2)完成映射构建。清空输入流残存边界 读完词典的最后一行END后输入流缓冲区中还会残留一个换行符\n。必须通过cin.get()将其吞掉以免干扰后续的正文读取。正文翻译与状态机处理 使用while (cin.get(ch))逐字节读取。若为小写字母追加到字符串s4。若为非小写字母且不是结束符E触发结算机制查询s4输出结果清空s4并输出当前非字母符号。时空复杂度分析时间复杂度建树阶段插入一个单词的复杂度为O(L)L为单词长度。总时间复杂度为。翻译阶段历史书逐字符读取每构成一个单词在字典树中查询的时间为O(L)。整体翻译时间复杂度严格线性为O(历史书总字符数)。整体复杂度完全足以应对海量输入。空间复杂度 静态字典树最多需要开辟节点总数×26个指针空间。本题开辟十万级数组tree[500000]空间消耗低于常见的65MB限制。空间复杂度为 O(N⋅∣Σ∣)其中N为最大节点数∣Σ∣26。坑点总结I/O同步机制与getchar冲突 代码中使用了ios::sync_with_stdio(false); cin.tie(0);解除了C与C的I/O同步。一旦解除同步绝对不能再混用scanf或getchar否则会导致缓冲区错乱。必须全程使用cin或cin.get()。流缓冲区的换行符残留cin在读取完毕后会把空格或换行符留在缓冲区。在切换为cin.get()读取正文前必须先吃掉这个残存的换行符。结束符的高效判定 题目明确指出历史书部分所有单词均为小写。因此遇到大写字母E来自结尾的END即可直接判定正文结束这是一种取巧且高效的剪枝。完整代码#include iostream #include string using namespace std; struct treenode{ int next[26];//状态转移表记录通往26个小写字母子节点的编号 int flag;//标记到当前结点为止能否构成一个完整的单词 string s3;//记录到当前为止如果能构成一个单词 单词对应的英文 }tree[500000]; int pc;//内存池分配计数器初始为00号节点作为树的根节点 //构造字典树 s1是英文 s2是火星文 //使用引用传参避免字符串深拷贝的开销 void insert(string s1,string s2){ int p0;//始终从根节点出发 //获取火星文s2的长度 int lens2.size(); //遍历火星文的每个字符搭建路径 for(int i0;ilen;i){ int js2[i]-a; //如果该通道尚未开辟分配新节点编号 if(tree[p].next[j]0){ tree[p].next[j]pc; } //指针跃迁到子节点 ptree[p].next[j]; } //路径走完在最后一个节点上存入英文释义并打上完整单词标记 tree[p].s3s1; tree[p].flag1; } //查询 在字典树中查找火星文单词 int find(string s4){ int p0; //火星文单词的长度 int len(int)s4.size(); //查找路径 for(int i0;ilen;i){ int js4[i]-a; if(tree[p].next[j]0) return 0; ptree[p].next[j]; } //如果当前能构成一个单词 输出这个单词 if(tree[p].flag1){ couttree[p].s3; return 1; } else return 0; } int main(){ //使用后严禁使用scanf,printf,getchar等c函数 ios::sync_with_stdio(false); cin.tie(0); string s; cins;//存储第一个START string s1,s2; //第一部分 英文火星文词典部分 while(cins1s2){ //通过END来判断词典部分的结束 if(s1!ENDs2!START){ //构造字典树 s1是英文 s2是火星文 //因为要翻译火星文 所以需要构造火星文字典树 insert(s1,s2); } else break; } //吃掉start后面的换行 不然就会导致第一个ch读入一个换行 cin.get();//不能用getchar 因为使用了iossync //第二部分 历史书部分 char ch; string s4;//临时容器用于拼接火星文字母 //逐个字符读取 不能用scanf 因为用了ios::sync //也不能用cin cin不会读空格、换行 while(cin.get(ch)){ //通过END来判断历史书的结束 题目已经告知所有单词均为小写 //所以我们判断一个E即可 if(ch!E){ //判断ch是否为字母 如果为字母就拼接到s4里 if(ch-a0ch-a25) s4ch; //如果不是字母就对s4火星文去字典树进行查找 //如果存在对应英文就输出英文 否则原样输出s4(火星文) //然后清空s4 并直接输出这一次的ch(非字母 else{ //如果查找到了s4对应的英文就输出英文(find函数直接输出了 //否则就原样输出 if(!find(s4)) couts4; //原样输出当前这个非字母的符号 coutch; //清空容器 准备拼接下一个单词 s4.clear(); } } //如果是END 就要退出了 else break; } return 0; }

相关文章:

What Are You Talking About(HDU- P1075)

伊格纳修斯真是走了狗屎运,昨天居然遇到了火星人!可惜他完全听不懂火星人的语言。临走时,火星人给了他一本火星历史书和一本词典。现在伊格纳修斯想把这本历史书翻译成英语,你能帮帮他吗?输入本题只有一组测试数据&…...

第二章:Compose入门—声明式UI编程

第二章:Compose 入门 — 声明式 UI 编程 Compose 的核心理念:用 Kotlin 代码声明 UI,而不是用 XML 布局文件。 2.1 传统 View 系统 vs Compose 对比项传统 View 系统Jetpack ComposeUI 描述XML 布局文件Kotlin 代码状态更新findViewById 手…...

三极管的削波失真是什么

削波失真(Clipping Distortion)是指当放大电路(如三极管、运放)的输出信号幅度超过了其供电电压或输出动态范围的极限时,信号的顶部和/或底部被“削平”而发生的失真现象。1. 它是如何发生的?以一个共射放大…...

SBA系列生物传感分析仪的工作原理是什么?

SBA系列生物传感分析仪利用酶促反应来进行定量分析,测定的关键传感器是固定化酶和过氧化氢电极复合传感器,分析过程基于以下生化反应:底物 固定化酶膜 → 产物谷氨酸    谷氨酸氧化酶  α-酮戊二酸葡萄糖    葡萄糖氧化…...

STM32F108C8T6小白入门特训营__1.4GPIO.C 代码分析

目录 1.只需要搞明白 cubemx 跟 代码对应关系就可以了 2.GPIO.C 代码加上注释 3.注意引脚的宏定义 1.只需要搞明白 cubemx 跟 代码对应关系就可以了 2.GPIO.C 代码加上注释 读懂注释部分代码即可 /* USER CODE BEGIN Header */ /*****************************************…...

JDBC(四):Statement

Statement作用:执行sql1. 执行dml、ddlint excuteUpdate(sql)(1)dml,输出受影响行数(为正,执行成功;为负,执行失败)(2)ddl,可能输出0&…...

HTML代码加密工具源码_在线网页加密解密_防复制源码

概述 在前端开发与网页设计中,保护原创代码不被轻易复制或篡改是许多开发者的核心诉求。无论是为了隐藏核心逻辑,还是防止样式被恶意盗用,一款高效、安全的加密工具都显得尤为重要。为此,幽络源源码网特别整理并分享这款HTML代码…...

从‘密码长度’到‘任意代码执行’:手把手复现攻防世界int_overflow靶场(附Python3 EXP)

从密码长度到系统控制:整数溢出漏洞实战攻防全解析 在网络安全领域,整数溢出漏洞往往因其隐蔽性而被开发者忽视,却可能成为攻击者打开系统大门的金钥匙。本文将带您深入一个典型场景:如何通过精心构造的密码输入,从简单…...

PPTX判断包含图表id

PPTX判断包含图表id ############################20250915判断是否包含图表################################################## i0 for shape in prs.slides[1].shapes:if shape.HasChart:print(fi:{i}包含图表)ii1 ############################20250915判断是否包含图表##…...

护眼钢化膜是智商税?圆偏振光+AR降反射实测,观复盾用硬核技术给出答案

护眼钢化膜是智商税?圆偏振光AR降反射实测,观复盾用硬核技术给出答案“花上百块买的护眼钢化膜,贴上后屏幕又黄又暗,眼睛反而更累了。”这样的抱怨在数码社区里比比皆是。与此同时,也有用户表示换了圆偏振光膜后&#…...

Docker Compose部署Nginx Proxy Manager保姆级教程:从端口映射到数据持久化全解析

Docker Compose部署Nginx Proxy Manager全流程精解:从架构设计到生产级实践 当你面对数十个需要反向代理的服务时,手动编辑Nginx配置文件的繁琐程度足以让人望而生畏。Nginx Proxy Manager的出现彻底改变了这种局面——这个基于Docker的开源解决方案将复…...

数组指针VS指针数组

【C语言】指针数组 VS 数组指针 原来这么简单! - 知乎 数组的名字就是数组首元素的指针。 判断指针类型指针口诀:先右后左,由近及远,括号优先。(从变量名看起) 指针数组: int *p[5] &…...

长期项目使用 Taotoken 聚合 API 在模型选型与切换上的便利性体验

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 长期项目使用 Taotoken 聚合 API 在模型选型与切换上的便利性体验 在一个持续数月的研发项目中,我们构建了一个需要集成…...

NotebookLM具身智能落地实战(从零部署到ROS2集成):谷歌AI团队内部培训手册泄露版

更多请点击: https://intelliparadigm.com 第一章:NotebookLM具身智能研究 NotebookLM 是 Google 推出的基于用户自有文档进行语义理解与推理的 AI 助手,其核心能力在于“文档感知”(document-grounded reasoning)。当…...

C51可重入函数原理与实践指南

1. 理解C51中的可重入函数概念 在8051单片机开发中,可重入函数(Reentrant Function)是一个关键但常被误解的概念。与通用计算机上的C语言开发不同,由于8051架构的特殊限制,标准C51函数默认都是不可重入的。这源于8051硬件设计的几个固有特点&…...

[具身智能-791]:NAV2 全局规划层 A*算法的本质是距离最短,而不是时间最短算法

核心定论A 算法本质:优先求解几何物理距离最短路径,天生不是「通行耗时最短」算法*一、直白区分A 追求目标*以栅格空间长度为核心权重,算出纯路程最短的路线,只看走了多少米,不看好不好走、堵不堵、快慢如何。时间最短…...

DevEco Studio预览器(Previewer)的3个隐藏技巧:从实时预览到多设备联调

DevEco Studio预览器的3个隐藏技巧:从实时预览到多设备联调 在鸿蒙应用开发中,DevEco Studio的Previewer功能早已超越了简单的UI查看工具。对于已经掌握基础操作的中级开发者而言,如何将这个看似简单的预览窗口转变为高效调试利器&#xff0…...

魔兽争霸3终极优化指南:WarcraftHelper专业级性能提升方案

魔兽争霸3终极优化指南:WarcraftHelper专业级性能提升方案 【免费下载链接】WarcraftHelper Warcraft III Helper , support 1.20e, 1.24e, 1.26a, 1.27a, 1.27b 项目地址: https://gitcode.com/gh_mirrors/wa/WarcraftHelper 还在为魔兽争霸3在现代硬件上的…...

瑞芯微(EASY EAI)RV1126B TF卡电路

1. TF卡电路RV1126B核心板集成了1个SDMMC控制器和1个SDIO控制器,均可支持SDIO3.0协议,以及MMC V4.51协议。4线的数据总线宽度支持SDR104模式,速率达到200MHz。SDMMC控制器是由PMIC单独供电,可以动态的在1.8V和3.3V之间调节&#x…...

NotebookLM多源文档交叉去重实战:基于BERT-Embedding相似度阈值调优(附可复用Python脚本)

更多请点击: https://intelliparadigm.com 第一章:NotebookLM多源文档交叉去重的核心挑战与价值定位 NotebookLM 作为 Google 推出的基于引用的 AI 笔记工具,其核心能力依赖于对用户上传文档的语义理解与跨文档关联。然而当用户导入多个来源…...

【NotebookLM要点提取黄金法则】:20年AI工具实战总结的5大避坑指南与3步精准萃取法

更多请点击: https://intelliparadigm.com 第一章:NotebookLM要点提取方法论全景概览 NotebookLM 是 Google 推出的面向研究者与知识工作者的 AI 原生笔记工具,其核心能力在于对用户上传文档(PDF、TXT、Google Docs)进…...

玩客云直刷Armbian集成宝塔:一站式搭建个人服务器

1. 玩客云改造前的准备工作 几年前花25块钱收了个二手玩客云,本来只是想当个下载机用,没想到这玩意儿刷了Armbian之后简直是个宝藏。特别是找到那个自带宝塔面板的直刷包之后,直接变身成全能小服务器,建站、跑服务、做测试环境样…...

【NotebookLM戏剧研究辅助实战指南】:20年戏剧学者亲授AI赋能文本细读的5大黄金工作流

更多请点击: https://intelliparadigm.com 第一章:NotebookLM戏剧研究辅助的底层逻辑与学科适配性 NotebookLM 以“语义锚点驱动”为核心机制,将用户上传的原始文本(如莎士比亚手稿影印本OCR结果、梅兰芳口述史转录稿、《奥尼尔书…...

通过curl命令快速测试Taotoken的ChatGPT接口是否通畅

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 通过curl命令快速测试Taotoken的ChatGPT接口是否通畅 对于开发者而言,在集成大模型API时,一个快速、直接的…...

企业无线网络进阶:FreeRadius服务器配置与TLS证书实战

1. 为什么企业无线网络需要FreeRadius与TLS证书 想象一下你公司的Wi-Fi像是一个没有门禁的公共广场,任何人都能随意进出。这种情况对于企业网络来说简直是灾难——数据泄露、带宽被占、内网渗透风险接踵而至。而FreeRadiusTLS证书的方案,就相当于给这个广…...

卡梅德生物技术快报|单 B 细胞抗体制备:流程优化、表达系统适配与性能数据

正文单克隆抗体制备是生物医学与兽医领域的核心技术。单 B 细胞抗体制备作为新一代技术,在筛选效率、基因天然性、制备周期上优势显著。本文从研发视角,按提出问题 — 分析问题 — 解决问题 — 效果数据,系统阐述单 B 细胞抗体制备的技术细节…...

KMS_VL_ALL_AIO终极指南:5分钟免费激活Windows和Office的完整方案

KMS_VL_ALL_AIO终极指南:5分钟免费激活Windows和Office的完整方案 【免费下载链接】KMS_VL_ALL_AIO Smart Activation Script 项目地址: https://gitcode.com/gh_mirrors/km/KMS_VL_ALL_AIO 还在为Windows和Office的激活问题而烦恼吗?KMS_VL_ALL_…...

【2026最新附图文】JDK25 下载、配置、卸载 保姆级教学(全程附实操步骤图)

本文以 windows 10 系统操作演示,详细介绍了 jdk 25 的下载、配置、卸载一、下载 JDK 打开浏览器,访问 Oracle 官方 Java 下载页面:https://www.oracle.com/cn/java/technologies/downloads/向下滚动,找到 JDK (这里以…...

5分钟搞定Android Studio中文界面:免费汉化插件完整指南

5分钟搞定Android Studio中文界面:免费汉化插件完整指南 【免费下载链接】AndroidStudioChineseLanguagePack AndroidStudio中文插件(官方修改版本) 项目地址: https://gitcode.com/gh_mirrors/an/AndroidStudioChineseLanguagePack 还在为Androi…...

coze 实战:萌宠摆摊视频工作流,一键自动生成趣味短片

大家吼,我是专注于AI的睡醒了叭! 我不是高手,但是想和大家分享自己学到的好玩好用的工作流~ 大家有没有在某抖平台刷到过这样的萌宠摆摊视频,真的很可爱了!也有很不错的点赞量,如果持续发,涨粉…...