Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
不能输入int64的In Reply To:哪位大牛帮我看看哪儿不对??从比赛那天到现在一直WA.... Posted by:ylcx at 2006-03-01 00:16:57 > var s:Array[1..2,0..11000] of int64; > n,m:longint; > f:array[0..11000] of longint; > bak:array[1..2,0..11000] of int64; > ss,tt,mid,ans:int64; > procedure init; > var i,j:longint; > begin > fillchar(s,sizeof(s),0); > readln(n,m); > for i:=1 to 2 do > for j:=1 to n do > begin > read(s[i,j]); > if s[i,j]>ss then ss:=s[i,j]; > s[i,j]:=s[i,j-1]+s[i,j]; > end; > end; > function ok(kk:int64):boolean; > var j,i,c,l1,l2:longint; > begin > ok:=false; > fillchar(f,sizeof(f),0); fillchar(bak,sizeof(bak),0); > l1:=0; l2:=0; > for i:=1 to n do > begin > while s[1,i]-s[1,l1]>kk do inc(l1); > while s[2,i]-s[2,l2]>kk do inc(l2); > bak[1,i]:=l1; bak[2,i]:=l2; > if (l1=i) or (l2=i) then exit; > end; > j:=0; > for i:=1 to n do > begin > c:=0; f[i]:=m+m; > l1:=i; l2:=i; > while s[1,i]+s[2,i]-s[1,j]-s[2,j]>kk do inc(j); > if f[i]>f[j]+1 then > f[i]:=f[j]+1; > while (l1+l2>0) do > begin > inc(c); > if l1>l2 then > l1:=bak[1,l1] > else > l2:=bak[2,l2]; > if l1>l2 then > begin > if f[i]>f[l1]+c then > f[i]:=f[l1]+c; > end > else > begin > if f[i]>f[l2]+c then > f[i]:=f[l2]+c; > end; > end; > if f[i]>m then exit; > end; > ok:=(f[n]<=m); > end; > procedure print; > begin > writeln(ans); > end; > procedure work; > begin > tt:=s[1,n]+s[2,n]; > while tt-ss>1 do > begin > mid:=(ss+tt) div 2; > if ok(mid) then > tt:=mid > else > ss:=mid; > end; > mid:=ss; > while ok(mid)=false do inc(mid); > ans:=mid; > end; > begin > init; > work; > print; > end. > > Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator