機器翻譯
時間限制: 10000ms內存限制: 1024kB
描述
小晨的電腦上安裝了一個機器翻譯軟件,他經常用這個軟件來翻譯英語文章。這個翻譯軟件的原理很簡單,它只是從頭到尾,依次將每個英文單詞用對應的中文含義來替換。對於每個英文單詞,軟件會先在內存中查找這個單詞的中文含義,如果內存中有,軟件就會用它進行翻譯;如果內存中沒有,軟件就會在外存中的詞典內查找,查出單詞的中文含義然後翻譯,並將這個單詞和譯義放入內存,以備後續的查找和翻譯。假設內存中有M個單元,每單元能存放一個單詞和譯義。每當軟件將一個新單詞存入內存前,如果當前內存中已存入的單詞數不超過M−1,軟件會將新單詞存入一個未使用的內存單元;若內存中已存入M 個單詞,軟件會清空最早進入內存的那個單詞,騰出單元來,存放新單詞。
假設一篇英語文章的長度為N 個單詞。給定這篇待譯文章,翻譯軟件需要去外存查找多少次詞典?假設在翻譯開始前,內存中沒有任何單詞。
輸入
輸入文件名為translate.in,輸入文件共2 行。每行中兩個數之間用一個空格隔開。
第一行為兩個正整數M 和N,代表內存容量和文章的長度。
第二行為N 個非負整數,按照文章的順序,每個數(大小不超過1000)代表一個英文
單詞。文章中兩個單詞是同一個單詞,當且僅當它們對應的非負整數相同。
輸出
輸出文件translate.out 共1 行,包含一個整數,為軟件需要查詞典的次數。
樣例輸入
3 7
1 2 1 5 4 4 1
樣例輸出
5
參考代碼
- /*
- * machine translation 2011-10-1 12:39PM Eric Zhou
- */
- import java.io.BufferedReader;
- import java.io.IOException;
- import java.io.InputStreamReader;
- import java.util.ArrayDeque;
- import java.util.Set;
- import java.util.TreeSet;
- public class Main {
- public static void main(String[] args) throws IOException {
- BufferedReader cin = new BufferedReader(new InputStreamReader(System.in));
- String sn[] = cin.readLine().split(" ");
- int m = Integer.parseInt(sn[0]);
- int n = Integer.parseInt(sn[1]);
- String sv[] = cin.readLine().split(" ");
- int v[] = new int[n];
- for(int i = 0;i < n;++ i)
- v[i] = Integer.parseInt(sv[i]);
- ArrayDeque<Integer>deque = new ArrayDeque<Integer>();
- Set<Integer>set = new TreeSet<Integer>();
- int cnt = 0;
- for(int i = 0;i < n;++ i){
- if(set.add(v[i])){
- deque.addLast(v[i]);
- cnt ++;
- if(deque.size() > m){
- set.remove(deque.pollFirst());
- }
- }
- }
- System.out.println(cnt);
- }
- }