NOIP2010 機器翻譯 題解

2021-07-04 22:31:55 字數 2470 閱讀 2180

小晨的電腦上安裝了乙個機器翻譯軟體,他經常用這個軟體來翻譯英語文章。

這個翻譯軟體的原理很簡單,它只是從頭到尾,依次將每個英文單詞用對應的中文含義來替換。對於每個英文單詞,軟體會先在記憶體中查詢這個單詞的中文含義,如果記憶體中有,軟體就會用它進行翻譯;如果記憶體中沒有,軟體就會在外存中的詞典內查詢,查出單詞的中文含義然後翻譯,並將這個單詞和譯義放入記憶體,以備後續的查詢和翻譯。

假設記憶體中有m個單元,每單元能存放乙個單詞和譯義。每當軟體將乙個新單詞存入記憶體前,如果當前記憶體中已存入的單詞數不超過m-1,軟體會將新單詞存入乙個未使用的記憶體單元;若記憶體中已存入m個單詞,軟體會清空最早進入記憶體的那個單詞,騰出單元來,存放新單詞。

假設一篇英語文章的長度為n個單詞。給定這篇待譯文章,翻譯軟體需要去外存查詢多少次詞典?假設在翻譯開始前,記憶體中沒有任何單詞。

輸入檔案共2行。每行中兩個數之間用乙個空格隔開。

第一行為兩個正整數m和n,代表記憶體容量和文章的長度。

第二行為n個非負整數,按照文章的順序,每個數(大小不超過1000)代表乙個英文單詞。文章中兩個單詞是同乙個單詞,當且僅當它們對應的非負整數相同。

包含乙個整數,為軟體需要查詞典的次數。

3 7

1 2 1 5 4 4 1

5

每個測試點1s

對於10%的資料有m=1,n≤5。

對於100%的資料有0<=n<=100,0<=m<=1000。

整個查字典過程如下:每行表示乙個單詞的翻譯,冒號前為本次翻譯後的記憶體狀況:

空:記憶體初始狀態為空。

1. 1:查詢單詞1並調入記憶體。

2. 1 2:查詢單詞2並調入記憶體。

3. 1 2:在記憶體中找到單詞1。

4. 1 2 5:查詢單詞5並調入記憶體。

5. 2 5 4:查詢單詞4並調入記憶體替代單詞1。

6. 2 5 4:在記憶體中找到單詞4。

7. 5 4 1:查詢單詞1並調入記憶體替代單詞2。

共計查了5次詞典。

佇列,範圍很小,所以暴力查詢+暴力維護左右端點就行了,不用迴圈佇列。

q:array[-1000..2000] of longint;

s,e,i,j,w,ans,m,n:longint;

flag:boolean;

function

size:longint;

begin

exit(e-s+1);

end;

begin

readln(m,n);

s:=1;

e:=0;

ans:=0;

fillchar(q,sizeof(q),0);

for i:=1

to n do

begin

read(w);

flag:=false;

for j:=s to e do

if q[j]=w then flag:=true;

ifnot flag //記憶體中沒有

then

begin

ans:=ans+1;

e:=e+1;

q[e]:=w;

if size>m then s:=s+1; //出佇列

end;

end;

writeln(ans);

end.

解二:字串優化
var ram:ansistring;

i,j,k,l,m,n,sum,num:longint;

function sr(x:longint):string;

begin

str(x,sr);

end;

begin

assign(input,'translate.in');

reset(input);

assign(output,'translate.out');

reset(output);

readln(m,n);

num:=0;

sum:=0;

ram:='';

for i:=1 to n do begin

read(k);

if pos('('+sr(k)+')',ram)=0 then begin

inc(sum);

if num=m then begin

delete(ram,1,pos(')',ram));

dec(num);

end;

ram:=ram+'('+sr(k)+')';

inc(num);

end;

end;

readln;

writeln(sum);

close(input);

close(output);

end.

NOIp2010 機器翻譯

描述 小晨的電腦上安裝了乙個機器翻譯軟體,他經常用這個軟體來翻譯英語文章。這個翻譯軟體的原理很簡單,它只是從頭到尾,依次將每個英文單詞用對應的中文含義來替換。對於每個英文單詞,軟體會先在記憶體中查詢這個單詞的中文含義,如果記憶體中有,軟體就會用它進行翻譯 如果記憶體中沒有,軟體就會在外存中的詞典內查...

NOIP 2010 機器翻譯

小晨的電腦上安裝了乙個機器翻譯軟體,他經常用這個軟體來翻譯英語文章。這個翻譯軟體的原理很簡單,它只是從頭到尾,依次將每個英文單詞用對應的中文含義來替換。對於每個英文單詞,軟體會先在記憶體中查詢這個單詞的中文含義,如果記憶體中有,軟體就會用它進行翻譯 如果記憶體中沒有,軟體就會在外存中的詞典內查詢,查...

noip2010 機器翻譯 (模擬)

p1774機器翻譯 accepted 標籤 模擬 noip提高組2010 小晨的電腦上安裝了乙個機器翻譯軟體,他經常用這個軟體來翻譯英語文章。這個翻譯軟體的原理很簡單,它只是從頭到尾,依次將每個英文單詞用對應的中文含義來替換。對於每個英文單詞,軟體會先在記憶體中查詢這個單詞的中文含義,如果記憶體中有...