P1540 机器翻译洛谷题解
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ì)列
接下來(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)題。
- 上一篇: Mac eclipse下载地址 Jav
- 下一篇: Linux 系统 top 命令详解