日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

P1540 机器翻译洛谷题解

發(fā)布時(shí)間:2023/12/20 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 P1540 机器翻译洛谷题解 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

P1540 機(jī)器翻譯

題目描述
這個(gè)翻譯軟件的原理很簡(jiǎn)單,它只是從頭到尾,依次將每個(gè)英文單詞用對(duì)應(yīng)的中文含義來(lái)替換。對(duì)于每個(gè)英文單詞,軟件會(huì)先在內(nèi)存中查找這個(gè)單詞的中文含義,如果內(nèi)存中有,軟件就會(huì)用它進(jìn)行翻譯;如果內(nèi)存中沒(méi)有,軟件就會(huì)在外存中的詞典內(nèi)查找,查出單詞的中文含義然后翻譯,并將這個(gè)單詞和譯義放入內(nèi)存,以備后續(xù)的查找和翻譯。
假設(shè)內(nèi)存中有 M 個(gè)單元,每單元能存放一個(gè)單詞和譯義。每當(dāng)軟件將一個(gè)新單詞存入內(nèi)存前,如果當(dāng)前內(nèi)存中已存入的單詞數(shù)不超過(guò) M-1,軟件會(huì)將新單詞存入一個(gè)未使用的內(nèi)存單元;若內(nèi)存中已存入 M 個(gè)單詞,軟件會(huì)清空最早進(jìn)入內(nèi)存的那個(gè)單詞,騰出單元來(lái),存放新單詞。
假設(shè)一篇英語(yǔ)文章的長(zhǎng)度為 N 個(gè)單詞。給定這篇待譯文章,翻譯軟件需要去外存查找多少次詞典?假設(shè)在翻譯開(kāi)始前,內(nèi)存中沒(méi)有任何單詞。

輸入格式
共 2 行。每行中兩個(gè)數(shù)之間用一個(gè)空格隔開(kāi)。

第一行為兩個(gè)正整數(shù) M,N,代表內(nèi)存容量和文章的長(zhǎng)度。

第二行為 N 個(gè)非負(fù)整數(shù),按照文章的順序,每個(gè)數(shù)(大小不超過(guò) 1000)代表一個(gè)英文單詞。文章中兩個(gè)單詞是同一個(gè)單詞,當(dāng)且僅當(dāng)它們對(duì)應(yīng)的非負(fù)整數(shù)相同。

輸出格式
一個(gè)整數(shù),為軟件需要查詞典的次數(shù)。

輸入輸出樣例
輸入
3 7
1 2 1 5 4 4 1
輸出
5

簡(jiǎn)單的STL應(yīng)用題,這里我用的是隊(duì)列來(lái)解題,每當(dāng)一個(gè)單詞來(lái)翻譯時(shí),就遍歷一遍隊(duì)列,如果隊(duì)列中有這個(gè)數(shù)表示內(nèi)存中存在這個(gè)單詞,不需要查詞典,而發(fā)現(xiàn)隊(duì)列中沒(méi)有這個(gè)數(shù)的話,就查詞典,并將這個(gè)數(shù)插入到隊(duì)列的尾部。
具體看樣例:
內(nèi)存最大容量為3,需要翻譯的單詞為7
分別是1 2 1 5 4 4 1
我們先要保證隊(duì)列中有數(shù),所以第一個(gè)數(shù)我們直接進(jìn)隊(duì)列

memory.push(word); //這時(shí)的word表示第一個(gè)數(shù) sum++; //sum表示需要查詞典的次數(shù),第一次翻譯當(dāng)然需要查詞典。

接下來(lái)是2,隊(duì)列中的數(shù)只有1,所以翻譯2時(shí)也需要查詞典,并讓2進(jìn)內(nèi)存(內(nèi)存容量未滿)。

接下來(lái)是1,隊(duì)列中的數(shù)有1和2,所以翻譯1時(shí)直接從內(nèi)存中可以找到單詞的翻譯。
接下來(lái)是5,隊(duì)列中的數(shù)有1和2,所以翻譯5時(shí)也需要查詞典,并讓5進(jìn)內(nèi)存(內(nèi)存容量未滿),

當(dāng)翻譯到第四個(gè)單詞,也就是4時(shí),此時(shí)內(nèi)存中的單詞為1、2、5,有三個(gè)內(nèi)存已滿,并且沒(méi)有4這個(gè)單詞的翻譯,所以我們需要讓1出隊(duì)列,再讓4進(jìn)隊(duì)列,保證內(nèi)存不會(huì)爆滿。

完成操作后隊(duì)列就變?yōu)?br />

···(接下來(lái)的操作不需要多說(shuō)的吧!)

最后看代碼QAQ

#include<bits/stdc++.h> using namespace std; queue<int> memory; int mem_size, num, sum = 0; int main() {int word;cin >> mem_size >> num;cin >> word;memory.push(word); //第一個(gè)數(shù)進(jìn)隊(duì)列sum++;for(int i = 1; i < num; i++) {int flag = 0; //判斷隊(duì)列中是否有這個(gè)數(shù)cin >> word;for(int i = 0; i < memory.size(); i++) { //隊(duì)列遍歷操作if(word == memory.front()) flag = 1;memory.push(memory.front());memory.pop();} if(!flag) {if(memory.size() >= mem_size) memory.pop();memory.push(word);sum++;}}cout << sum <<endl; }

總結(jié)

以上是生活随笔為你收集整理的P1540 机器翻译洛谷题解的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。