分析:该题是经典的队列题目,直接用队列实现就可以。如果数据范围大一些的话还可hash判重!

        这可以说是一道送分的题目,但是还有粗心的学生会在这里失分,主要原因是数组的范围定义的不合适,因为空间足够用,在考试中数据范围要稍大一些。当然还有个别同学是因为模拟失误了,这种送分题目我只能说,一定要多对拍几组特殊数据,保证得满分才好!

var
  m,n,sum:longint;
  q:array[0..1000] of longint;
  head,tail:longint;
  procedure init;
  var bo:boolean;
  i,j,x:longint;
  begin
    readln(m,n);
    head:=0;tail:=0; sum:=0;
    for i:=1 to n do
      begin
        bo:=false;
        read(x);
        for j:=head+1 to   tail do
          if q[j]=x then
            begin   bo:=true;   break; end;
        if not bo  then
          begin
            if  tail-head>=M then  inc(head);
            inc(tail);  q[tail]:=x;inc(sum);
          end
      end;
      writeln(sum);
  end;
begin
  assign(input,'translate.in');reset(input);
  assign(output,'translate.out'); rewrite(output);
  init;
  close(input); close(output);
end.
View Code