作业帮 > 综合 > 作业

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

来源:学生作业帮 编辑:搜搜考试网作业帮 分类:综合作业 时间:2024/04/28 12:23:45
一道水题,却不知错在何处,求助!noip2010机器翻译问题
求助?为什么过不了最后一个点
我的代码我觉得没错误,为什么过不了最后一个点,答案给的是297无算的是295,就最后一个点不过为什么?
代码如下
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 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.
数据在
tyvj上,最后一个数据
一道水题,却不知错在何处,求助!noip2010机器翻译问题
数据中单词有可能是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.