百度语言翻译机
百度语言翻译机
2006 年百度之星程序设计大赛初赛题目 6
百度语言翻译机
时限 1s
百度的工程师们是非常注重效率的,在长期的开发与测试过程中,他们逐渐创造了一套他们独特的缩率语。他们在平时的交谈,会议,甚至在各中技术文档中都会大量运用。
为了让新员工可以更快地适应百度的文化,更好地阅读公司的技术文档,人力资源部决定开发一套专用的翻译系统,把相关文档中的缩率语和专有名词翻译成日常语言。
输入数据:
输入数据包含三部分
1. 第一行包含一个整数 N ( N<=10000 ),表示总共有多少个缩率语的词条。
2. 紧接着有 N 行的输入,每行包含两个字符串,以空格隔开。第一个字符串为缩率语(仅包含大写英文字符,长度不超过 10 ),第二个字符串为日常语言(不包含空格,长度不超过 255 ) .
3. 从第 N+2 开始到输入结束为包含缩略语的相关文档。(总长度不超过 1000000 个字符)
输出数据:
输出将缩率语转换成日常语言的文档。(将缩率语转换成日常语言,其他字符保留原样)
输入样例
输出样例
注意:
1 . 输入数据中是中英文混合的,中文采用 GBK 编码。
2 . 为保证答案的唯一性,缩率语的转换采用正向最大匹配(从左到右为正方向)的原则。请注意输入例子中 PMD 的翻译。
百度语言翻译机
时限 1s
百度的工程师们是非常注重效率的,在长期的开发与测试过程中,他们逐渐创造了一套他们独特的缩率语。他们在平时的交谈,会议,甚至在各中技术文档中都会大量运用。
为了让新员工可以更快地适应百度的文化,更好地阅读公司的技术文档,人力资源部决定开发一套专用的翻译系统,把相关文档中的缩率语和专有名词翻译成日常语言。
输入数据:
输入数据包含三部分
1. 第一行包含一个整数 N ( N<=10000 ),表示总共有多少个缩率语的词条。
2. 紧接着有 N 行的输入,每行包含两个字符串,以空格隔开。第一个字符串为缩率语(仅包含大写英文字符,长度不超过 10 ),第二个字符串为日常语言(不包含空格,长度不超过 255 ) .
3. 从第 N+2 开始到输入结束为包含缩略语的相关文档。(总长度不超过 1000000 个字符)
输出数据:
输出将缩率语转换成日常语言的文档。(将缩率语转换成日常语言,其他字符保留原样)
输入样例
6
PS 门户搜索部
NLP 自然语言处理
PM 产品市场部
HR 人力资源部
PMD 产品推广部
MD 市场发展部
百度的部门包括 PS , PM , HR , PMD , MD 等等,其中 PS 还包括 NLP 小组。
输出样例
百度的部门包括门户搜索部,产品市场部,人力资源部,产品推广部,市场发展部等等,其中门户搜索部还包括自然语言处理小组。
注意:
1 . 输入数据中是中英文混合的,中文采用 GBK 编码。
2 . 为保证答案的唯一性,缩率语的转换采用正向最大匹配(从左到右为正方向)的原则。请注意输入例子中 PMD 的翻译。
#include<iostream> #include<string> using namespace std; int main() { int n; cout<<"input a number:"; cin>>n; while((n>1000)||n<1) { cout<<"please input a real number:"; cin>>n; } string s_name[1000],f_name[1000]; for(int i=0;i<n;i++) { cin>>s_name[i]>>f_name[i]; } //防止比较过程中断的先被找到,要对缩略语进行从长到段的排序 冒泡排序 for(int i=0;i<n-1;i++) for(int j=i+1;j<n;j++) { if(s_name[i].length()<s_name[j].length()) { swap(s_name[i],s_name[j]); swap(f_name[i],f_name[j]); } } string s; cout<<"\n please input the content:"<<endl; cin>>s; for(int i=0;i<n;i++) { while(s.find(s_name[i])!=string::npos) { int index=s.find(s_name[i]); s.erase(index,s_name[i].length());//删除简写的名称 s.insert(index,f_name[i]);//插入全称 } } cout<<"the full content is:"<<endl; cout<<s<<endl; return 0; }
不使用string类的方法 用结构体实现
#include<iostream> using namespace std; struct Baidu { char s_name[10]; char f_name[100]; }; void sort_name(Baidu baidu[],int n) { for(int i=0;i<n-1;i++) for(int j=i;j<n;j++) { if(strlen(baidu[i].s_name)<strlen(baidu[j].s_name)) swap(baidu[i],baidu[j]); } } void replace_name(Baidu baidu[],char s[],int n) { int length; char tmp[1000]; for(int i=0;i<n;i++) { char *p=strstr(s,baidu[i].s_name); while(p!=NULL) { length=strlen(baidu[i].s_name); *p=0; strcpy(tmp,p+length);//把简称后面的内容全部拷贝到tmp内 //strcat(s,baidu[i].f_name); strcat(p,baidu[i].f_name); //strcat(s,tmp); strcat(p+strlen(baidu[i].f_name),tmp); p=strstr(s,baidu[i].s_name); } } } int main() { int n; cout<<"input the number of s-f word:"; cin>>n; Baidu baidu[10]; for(int i=0;i<n;i++) cin>>baidu[i].s_name>>baidu[i].f_name; sort_name(baidu,n); cout<<"input the content:"<<endl; char s[1000]; cin>>s; replace_name(baidu,s,n); cout<<"replaced content is:"<<endl; cout<<s; }
本文 由 cococo点点 创作,采用 知识共享 署名-非商业性使用-相同方式共享 3.0 中国大陆 许可协议进行许可。欢迎转载,请注明出处:
转载自:cococo点点 http://www.cnblogs.com/coder2012
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· [AI/GPT/综述] AI Agent的设计模式综述
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!