百度语言翻译机
百度語(yǔ)言翻譯機(jī)
2006 年百度之星程序設(shè)計(jì)大賽初賽題目 6?百度語(yǔ)言翻譯機(jī)?
時(shí)限 1s?
百度的工程師們是非常注重效率的,在長(zhǎng)期的開(kāi)發(fā)與測(cè)試過(guò)程中,他們逐漸創(chuàng)造了一套他們獨(dú)特的縮率語(yǔ)。他們?cè)谄綍r(shí)的交談,會(huì)議,甚至在各中技術(shù)文檔中都會(huì)大量運(yùn)用。?
為了讓新員工可以更快地適應(yīng)百度的文化,更好地閱讀公司的技術(shù)文檔,人力資源部決定開(kāi)發(fā)一套專(zhuān)用的翻譯系統(tǒng),把相關(guān)文檔中的縮率語(yǔ)和專(zhuān)有名詞翻譯成日常語(yǔ)言。?
輸入數(shù)據(jù):?
輸入數(shù)據(jù)包含三部分?
1. 第一行包含一個(gè)整數(shù) N ( N<=10000 ),表示總共有多少個(gè)縮率語(yǔ)的詞條。?
2. 緊接著有 N 行的輸入,每行包含兩個(gè)字符串,以空格隔開(kāi)。第一個(gè)字符串為縮率語(yǔ)(僅包含大寫(xiě)英文字符,長(zhǎng)度不超過(guò) 10 ),第二個(gè)字符串為日常語(yǔ)言(不包含空格,長(zhǎng)度不超過(guò) 255 ) .?
3. 從第 N+2 開(kāi)始到輸入結(jié)束為包含縮略語(yǔ)的相關(guān)文檔。(總長(zhǎng)度不超過(guò) 1000000 個(gè)字符)?
輸出數(shù)據(jù):?
輸出將縮率語(yǔ)轉(zhuǎn)換成日常語(yǔ)言的文檔。(將縮率語(yǔ)轉(zhuǎn)換成日常語(yǔ)言,其他字符保留原樣)?
輸入樣例
6?
PS 門(mén)戶(hù)搜索部?
NLP 自然語(yǔ)言處理?
PM 產(chǎn)品市場(chǎng)部?
HR 人力資源部?
PMD 產(chǎn)品推廣部?
MD 市場(chǎng)發(fā)展部?
百度的部門(mén)包括 PS , PM , HR , PMD , MD 等等,其中 PS 還包括 NLP 小組。?
輸出樣例
百度的部門(mén)包括門(mén)戶(hù)搜索部,產(chǎn)品市場(chǎng)部,人力資源部,產(chǎn)品推廣部,市場(chǎng)發(fā)展部等等,其中門(mén)戶(hù)搜索部還包括自然語(yǔ)言處理小組。
注意:?
1 . 輸入數(shù)據(jù)中是中英文混合的,中文采用 GBK 編碼。?
2 . 為保證答案的唯一性,縮率語(yǔ)的轉(zhuǎn)換采用正向最大匹配(從左到右為正方向)的原則。請(qǐng)注意輸入例子中 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];}//防止比較過(guò)程中斷的先被找到,要對(duì)縮略語(yǔ)進(jìn)行從長(zhǎng)到段的排序 冒泡排序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());//刪除簡(jiǎn)寫(xiě)的名稱(chēng)s.insert(index,f_name[i]);//插入全稱(chēng)}}cout<<"the full content is:"<<endl;cout<<s<<endl;return 0; }
不使用string類(lèi)的方法 用結(jié)構(gòu)體實(shí)現(xiàn)
#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);//把簡(jiǎn)稱(chēng)后面的內(nèi)容全部拷貝到tmp內(nèi)//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; }?
總結(jié)
- 上一篇: 【STC15库函数上手笔记】7、PCA与
- 下一篇: 【RK3399Pro学习笔记】五、ROS