圆周舞蹈 (Standard IO)
来源:互联网 发布:网络经费分析 编辑:程序博客网 时间:2024/04/27 19:18
题意/Description:
熊大妈的奶牛在时针的带领下,围成了一个圆圈跳舞。由于没有严格的教育,奶牛们之间的间隔不一致。
奶牛想知道两只最远的奶牛到底隔了多远。奶牛A到奶牛B的距离为A顺时针走和逆时针走,到达B的较短路程。告诉你相邻两个奶牛间的距离,请你告诉奶牛两只最远的奶牛到底隔了多远。
读入/Input:
第一行一个整数N,表示有N只奶牛。(2<=N<=100000)。
接下来2~N+1行,第i行有一个数,表示第i-1头奶牛顺时针到第i头奶牛的距离。(1<=距离<=maxlongint,距离和<=maxlongint)
第N+1行的数表示第N头奶牛顺时针到第1头奶牛的距离。
输出/Output:
一行,表示最大距离。
题解/solution:
听LZH说,算出前缀和,二分就行了。我急脳(niao),下了。
代码/Code:
var sum:array [0..200001] of longint; n,max,min:longint;procedure init;var i,c:longint;begin readln(n); for i:=2 to n+1 do begin readln(c); sum[i]:=sum[i-1]+c; end; for i:=n+2 to 2*n do sum[i]:=sum[n+1]+sum[i-n]; max:=0;end;procedure main;var i,l,r,mid,t,k,minn:longint;begin for i:=1 to n do begin l:=i; r:=n+i; min:=maxlongint; while l<=r do begin mid:=(l+r) shr 1; t:=sum[mid]-sum[i]; k:=sum[n+i]-sum[mid]; if abs(t-k)<min then begin min:=abs(t-k); if t<k then minn:=t else minn:=k; if minn>max then max:=minn; end; if l=mid then break; if t<k then l:=mid else r:=mid; end; t:=sum[r]-sum[i]; k:=sum[n+i]-sum[r]; if abs(t-k)<min then begin min:=abs(t-k); if t<k then minn:=t else minn:=k; if minn>max then max:=minn; end; end;end;begin init; main; writeln(max);end.
4 0
- 圆周舞蹈 (Standard IO)
- 圆周舞蹈 (Standard IO)
- 圆周舞蹈
- July 16th 模拟赛C T3 圆周舞蹈 Solution
- 圆周舞蹈_纪中1745_二分查找
- Window (Standard IO)
- Party (Standard IO)
- 1326. Window (Standard IO)
- 遥控车 (Standard IO)
- Mobile Service (Standard IO)
- 舞台设置 (Standard IO)
- 拉力赛 (Standard IO)
- 车展 (Standard IO)
- 1328. Party (Standard IO)
- 三条线 (Standard IO)
- 绕圈跑 (Standard IO)
- 餐桌 (Standard IO)
- 直角三角形 (Standard IO)
- jquery 定时器 每隔15秒调用函数
- UVA - 846 Steps
- UVA - 10499 The Land of Justice
- 控制反转(IoC)促进了低耦合,耦合是什么意思?
- UVA - 10790 How Many Points of Intersection?
- 圆周舞蹈 (Standard IO)
- Selenium+PhantomJS自动续借图书馆书籍(上)
- HDU 1069 Monkey and Banana
- 定时器
- Android 4.4 Kitkat 使能有线网络 Ethernet
- 语音的基本概念
- linux shell exit 值
- 大话设计模式:简单工厂模式
- 【环境配置记录】Ubuntu 1604 安装 SVN ,以及 SVN 的 分支(branch)和合并(merge)