讨论 / 【第五个点是怎么回事】
汪小正 2011-09-20 03:56:00
点我顶贴 收藏 删除
老是过不了。

写的2分。第五行我只输出了一行。。

program p1231;

var

top,temp,ans,k,m,j,i,mid,maxn,l,r:longint;

a,f:array[0..501]of longint;

function can(mid:longint):boolean;

var

i,tot,temp:longint;

begin

tot:=k;

temp:=0;

for i:=m downto 1 do

begin

if temp+a[i]>mid then

begin

dec(tot);

if tot<=0 then exit(false);

temp:=0;

end;

inc(temp,a[i]);

end;

exit(true);

end;

procedure main;

begin

readln(m,k);

maxn:=0;

for i:=1 to m do

begin

read(a[i]);

if a[i]>maxn then maxn:=a[i];

end;

l:=maxn; r:=maxlongint-maxn-1;

repeat

mid:=(l+r) div 2;

if can(mid) then

begin

r:=mid-1;

ans:=mid;

end

else l:=mid+1;

until l>r;

temp:=0;

top:=0;

for i:=m downto 1 do

begin

if temp+a[i]>ans then

begin

inc(top);

f[top]:=i+1;

temp:=0;

end;

inc(temp,a[i]);

end;

inc(top);

f[top]:=1;

f[0]:=m+1;

f[top]:=1;

for i:=top downto 1 do writeln(f[i],' ',f[i-1]-1);

end;

begin

main;

end.

查看更多回复
提交回复