OJ 1478 机器翻译
描述
小晨的電腦上安裝了一個機器翻譯軟件,他經常用這個軟件來翻譯英語文章。
這個翻譯軟件的原理很簡單,它只是從頭到尾,依次將每個英文單詞用對應的 中文含義來替換。對于每個英文單詞,軟件會先在內存中查找這個單詞的中文含義,如果內存中有,軟件就會用它進行翻譯;如果內存中沒有,軟件就會在外存中的 詞典內查找,查出單詞的中文含義然后翻譯,并將這個單詞和譯義放入內存,以備后續的查找和翻譯。
假設內存中有M 個單元,每單元能存放一個單詞和譯義。每當軟件將一個新單詞存入內存前,如果當前內存中已存入的單詞數不超過M?1,軟件會將新單詞存入一個未使用的內存單元;若內存中已存入M 個單詞,軟件會清空最早進入內存的那個單詞,騰出單元來,存放新單詞。
假設一篇英語文章的長度為N 個單詞。給定這篇待譯文章,翻譯軟件需要去外存查找多少次詞典?假設在翻譯開始前,內存中沒有任何單詞。
【數據范圍】
對于10%的數據有M=1,N≤ 5。
對于100%的數據有0<M≤ 100,0<N ≤ 1000。
輸入
共2 行。每行中兩個數之間用一個空格隔開。
第一行為兩個正整數M 和N,代表內存容量和文章的長度。
第二行為N 個非負整數,按照文章的順序,每個數(大小不超過1000)代表一個英文
單詞。文章中兩個單詞是同一個單詞,當且僅當它們對應的非負整數相同。
輸出
共1 行,包含一個整數,為軟件需要查詞典的次數。
輸入樣例 1
3 7
1 2 1 5 4 4 1
輸出樣例 1
5
?
根據題目要求翻譯的容量是固定的那么,每次遇到新詞就要加到容器中,滿了就清除最早的,我們可以使用取余操作來實現清除最新的,我們可以使用數組存儲,翻譯容器和詞組,并對翻譯容器初始化,以保證它里面沒有非負數,然后進行遞歸,每次都遞歸詞組中的一個位置,這個位置在進入整個翻譯容器比對如果無相同則替換,計數。
#include <iostream>using namespace std; int cont,m,n; int a[1005]; int b[1005]; int findit(int x,int sit) {int i;if(x==n)return cont;for(i=0; i<m; i++){if(a[x]==b[i]){break;}}if(i==m){sit++;b[sit%m]=a[x];cont++;}x++;findit(x,sit); } int main() {while(cin>>m>>n){cont=0;fill(b,b+m,-1);for(int i=0; i<n; i++)cin>>a[i];cout<<findit(0,0)<<endl;}return 0; }
?
總結
以上是生活随笔為你收集整理的OJ 1478 机器翻译的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 不动产测绘数据入库_房产基础地理信息数据
- 下一篇: Big-man进军Linux系统(二)