您的位置:首页 > 其它

圆周舞蹈 (Standard IO)

2016-07-16 21:54 411 查看


Description

  熊大妈的奶牛在时针的带领下,围成了一个圆圈跳舞。由于没有严格的教育,奶牛们之间的间隔不一致。
  奶牛想知道两只最远的奶牛到底隔了多远。奶牛A到奶牛B的距离为A顺时针走和逆时针走,到达B的较短路程。告诉你相邻两个奶牛间的距离,请你告诉奶牛两只最远的奶牛到底隔了多远。

题解:

  用前缀和将环一分为二,再枚举答案。

代码:

var
a:array[0..500000] of longint;
n,min,max:longint;
procedure init;
var
i,s:longint;
begin
readln(n);
for i:=2 to n+1 do
begin
readln(s);
a[i]:=a[i-1]+s;
end;
for i:=n+2 to 2*n do
a[i]:=a[n+1]+a[i-n];
end;
procedure main;
var
i,l,r,mid,x,y,s:longint;
begin
for i:=1 to n do
begin
l:=i;r:=n+i;
min:=maxlongint;
while l<=r do
begin
mid:=(l+r) div 2;
x:=a[mid]-a[i];
y:=a[n+i]-a[mid];
if abs(x-y)<mid then
begin
mid:=abs(x-y);
if x<y then
s:=x
else s:=y;
if s>max then max:=s;
end;
if l=mid then break;
if x<y then
l:=mid
else r:=mid;
end;
x:=a[r]-a[i];
y:=a[n+i]-a[r];
if  abs(x-y)<min then
begin
min:=abs(x-y);
if  x<y then
s:=x
else
s:=y;
if s>max then max:=s;
end;
end;
end;
begin
init;
main;
end.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  1745