讨论 / 请教一下这道题我怎么出错了..就是很简单地算法写出来的..
原始鸭 2008-08-14 05:42:00
点我顶贴 收藏 删除
除了第一个数据,全都是普通保护性错误..据说是数组开得不够..应该怎么开呢???

PROGRAM BREAD;

const

maxn=1000000;

var

eat,e:array[1..maxn] of boolean;

a,cj:array[1..maxn] of longint;

n,k,least,p,q,i,j,nk,lj,kind:longint;

procedure init;

var

i:longint;

begin

fillchar(eat,sizeof(eat),false);

readln(n,k);

for i:=1 to n do

begin

read(a[i]);

if eat[a[i]] =false then

begin

eat[a[i]]:=true;

inc(kind);

end;

end;

least:=kind*k;

end;

//================= m a i n

begin

init;

p:=0;q:=maxn;

for i:=1 to n-least+1 do

begin

fillchar (cj,sizeof(cj),0);

nk:=kind;

lj:=0;

for j:=1 to kind do e[j]:=eat[j];

for j:=i to n do

begin

if e[a[j]] then

begin

inc(cj[a[j]]);

if cj[a[j]]=k then begin dec(nk);e[a[j]]:=false;end;

end;

inc(lj);

if nk=0 then

begin

if lj=least then begin write(i,’ ’,j);halt;end;

if lj<q-p+1 then begin p:=i;q:=j;end;

end;

end;

end;

if q-p=maxn+1 then writeln(’-1’)

else writeln(p,’ ’,q);

end.

#1 Jollwish@2008-08-14 01:22:00
回复 删除
e小了吧...
#2 原始鸭@2008-08-14 04:34:00
回复 删除
大家救救我吧

#3 phoenix@2008-08-14 05:42:00
回复 删除
有题解
查看更多回复
提交回复