【寒假任务】洛谷1540 机器翻译

问题描述
机器翻译原理:碰到单词现在内存里寻找,若没有再到外存取寻找。内存中有多个单元,一个单元可以存储一个单词。假设有m个单元,若内存中有m-1个单元被用,那么从外存中查找的单词可以存储;若m个单元都被存储,删去最先进入单元的单词,继续存储。现给出内存容量m,文章长度n,问查完一篇文章要到外存去查找几次。
输入
第一行为两个正整数M和N,代表内存容量和文章的长度。
第二行为N个非负整数,按照文章的顺序,每个数(大小不超过1000)代表一个英文单词。文章中两个单词是同一个单词,当且仅当它们对应的非负整数相同。
输出
包含一个整数,为软件需要查词典的次数。
样例输入
3 7
1 2 1 5 4 4 1
样例输出
5
算法讨论
简单的模拟,考虑到范围很小,纯粹的暴力就能过。时间复杂度O(n²)。

const
  maxn=1000;
var
  a:array[1..maxn] of longint;
  b:array[1..101] of longint;
  f:array[0..maxn] of boolean;
  i,j,k,s,n,m:longint;
begin
  read(n,m);
  for i:=1 to m do
    read(a[i]);
  for i:=1 to m do
    begin
      if f[a[i]]=false
        then begin
               inc(s);
               inc(j);
               b[j]:=a[i];
               f[a[i]]:=true
             end;
      if j>n
        then begin
               f[b[1]]:=false;
               for k:=2 to j do
                 b[k-1]:=b[k];
               dec(j)
             end;
    end;
  write(s)
end.

这里写图片描述
Pixiv ID:59781074

阅读更多
版权声明:嗯随意转载吧,注明出处就好 https://blog.csdn.net/Fallen_Angel001/article/details/54412163
文章标签: 暴力 模拟
个人分类: 模拟 寒假任务
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭