time limit per test

2 seconds

memory limit per test

256 megabytes

input

standard input

output

standard output

You are given a sequence of n integers a1, a2, ..., an.

Determine a real number x such that the weakness of the sequence a1 - x, a2 - x, ..., an - x is
as small as possible.

The weakness of a sequence is defined as the maximum value of the poorness over all segments (contiguous subsequences) of a sequence.

The poorness of a segment is defined as the absolute value of sum of the elements of segment.

Input

The first line contains one integer n (1 ≤ n ≤ 200 000),
the length of a sequence.

The second line contains n integers a1, a2, ..., an (|ai| ≤ 10 000).

Output

Output a real number denoting the minimum possible weakness of a1 - x, a2 - x, ..., an - x.
Your answer will be considered correct if its relative or absolute error doesn't exceed 10 - 6.

Sample test(s)
input
3
1 2 3
output
1.000000000000000
input
4
1 2 3 4
output
2.000000000000000
input
10
1 10 2 9 3 8 4 7 5 6
output
4.500000000000000
Note

For the first case, the optimal value of x is 2 so
the sequence becomes  - 1, 0, 1 and
the max poorness occurs at the segment "-1" or segment "1". The poorness value (answer) equals to 1 in this case.

For the second sample the optimal value of x is 2.5 so
the sequence becomes  - 1.5,  - 0.5, 0.5, 1.5 and the max poorness occurs on segment "-1.5 -0.5" or "0.5 1.5". The poorness value (answer)
equals to 2 in this case.

这题可以用三分,但是在三分判断条件的时候要注意,用循环限定次数比较好,因为double精度不够高。

#include<iostream>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
#include<vector>
#include<map>
#include<set>
#include<queue>
#include<stack>
#include<string>
#include<algorithm>
using namespace std;
#define ll long long
#define inf 99999999
#define maxn 200060
#define eps 1e-10
int n;
double a[maxn],b[maxn],sum1[maxn],sum2[maxn],c[maxn]; double cal(double x)
{
int i,j,f;
double maxnum=0;
sum1[0]=sum2[0]=0;
for(i=1;i<=n;i++){
b[i]=a[i]-x;
sum1[i]=max(b[i],sum1[i-1]+b[i]);maxnum=max(maxnum,sum1[i]);
c[i]=x-a[i];
sum2[i]=max(c[i],sum2[i-1]+c[i]);maxnum=max(maxnum,sum2[i]);
}
return maxnum; } int main()
{
int m,i,j;
double l,r,m1,m2,minx,maxx;
while(scanf("%d",&n)!=EOF)
{
for(i=1;i<=n;i++){
scanf("%lf",&a[i]);
}
l=-10005;r=10005;
for(i=0;i<100;i++){
double d=(l+r)/2.0;
m1=d;
m2=(d+r)/2.0;
if(cal(m2)-cal(m1)>=0){
r=m2;
}
else l=m1;
}
printf("%.9f\n",cal(l));
}
return 0;
}

最新文章

  1. js 求时间差
  2. Kettle行列转换
  3. POJ 2960 博弈论
  4. Even Fibonacci numbers
  5. sql常识-IN 操作符
  6. JavaScript 计算两个颜色叠加值
  7. C# (using Newtonsoft.Json) Json 转换用法小总结
  8. Sublime Text 3 配置分析与我的配置---小结
  9. 页面中引入mui 地址选择,点击页面中其他input时页面回到顶部
  10. Dynamics CRM2011 MspInstallAction failed when installing an Update Rollup
  11. mysql 使用正则表达式查询
  12. Ajax使用formdata异步上传文件,报错the request was rejected because no multipart boundary was found
  13. 【Bilinear interpolation】双线性插值详解(转)
  14. 廖雪峰Java7处理日期和时间-4最佳实践-最佳实践
  15. Spring学习三
  16. Oracle12c中数据删除(delete)新特性之数据库内归档功能
  17. Java50道经典习题-程序18 乒乓球赛
  18. linux、SMART、Shell的学习
  19. hackerrank Project Euler #210: Obtuse Angled Triangles
  20. iOS GCD NSOperation NSThread等多线程各种举例详解

热门文章

  1. 如何实现CentOS服务器的扩容??
  2. 【Git】3、创建Git版本库、配置Git仓库用户邮箱信息
  3. g/test/s/lose/won/g
  4. Oracle获取session的IP方法
  5. SSTI
  6. Java 迭代器的使用 Iterator
  7. CNN可视化技术总结(一)--特征图可视化
  8. Jmeter的Cookie管理器调试与参数化
  9. Linux内存 free 详解
  10. Go Concurrency Patterns: Pipelines and cancellation