一道水题,却不知错在何处,求助!noip2010机器翻译问题

2个回答

  • 数据中单词有可能是0,而你的程序 f 数组初值为0,也就是说默认内存中全是0.

    当数据中的0第一次出现时,就会认为已在内存中而不会去查字典.

    例如数据:

    10 1

    0

    正确输出是1,而你的输出为0.

    解决方法:

    将 f 数组赋初值为-1.(数据中无负数,不必担心错误)

    一开始加一句 for i:=1 to m do f[i]=-1;

    修改后的程序:

    var q,m,n,i,j,k,c:longint;

    f:array[1..1000] of longint;

    a:array[1..10000] of longint;

    begin

    readln(m,n);

    for i:=1 to m do f[i]=-1;

    for i:=1 to n do

    read(a[i]);

    for i:= 1 to n do

    begin

    for j:= 1 to m do

    if f[j]=a[i] then begin q:=0; break end else q:=1;

    if q=1 then begin k:=(k mod m)+1; f[k]:=a[i]; inc(c);

    end;

    end;

    writeln(c);

    end.