圆周舞蹈 (Standard IO)

来源:互联网 发布:视频剪辑加字幕软件 编辑:程序博客网 时间:2024/04/27 17:31

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.

3 0
原创粉丝点击