zoukankan      html  css  js  c++  java
  • F.求最大值

    时间限制:C/C++ 1秒,其他语言2秒
    空间限制:C/C++ 32768K,其他语言65536K
    64bit IO Format: %lld

    题目描述

    给出一个序列,你的任务是求序列中 (a[j]-a[i])/(j-i)【1<=i<j<=n】的最大值

    输入描述:

    本题包含多组输入,每组输入第一行一个数字n,表示序列的长度。
    然后接下来一行输入n个数,表示原先序列的样子。
    数据范围:
    3<=n<=200000
    -1000000000<=a[i]<=1000000000

    输出描述:

    每组数据输出一行一个浮点数,保留两位小数,表示所求的最大值。
    示例1

    输入

    5
    2 4 6 8 10

    输出

    2.00

    备注:

    输入只有整形。

    分析:问题转化为求序列中两点斜率的最大值,斜率最大值的两个点必为相邻的两点,
      方法1,可以通过画图得出结论;方法2,点a[i]与a[j]斜率实际上就是a[i]与
      a[i+1]的斜率k1a[i+1]与a[i+2]的斜率k2......a[j-1]与a[j]kj-i+1的斜率
      
    这j-i+1个数的平均值k,则必有k<=max{k1,k2,...,kj-i+1},即最大值必为相邻两点
      的斜率。

     1 #include<cstdio>
     2 #include<algorithm>
     3 using namespace std;
     4 double a[300000];
     5 int main()
     6 {
     7     int N;
     8     while(scanf("%d",&N)!=EOF)
     9     {
    10         double ans=-99999999999999;
    11         scanf("%lf",&a[0]);
    12         for(int i=1;i<N;i++)
    13         {scanf("%lf",&a[i]);ans=max(ans,a[i]-a[i-1]);}
    14         printf("%.2f
    ",ans);
    15     }
    16     return 0;
    17 }
    View Code
    
    
    
    
    

    作者:ACRykl —— O ever youthful,O ever weeping!

    出处:http://www.cnblogs.com/ACRykl/

    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

  • 相关阅读:
    项目报错二
    项目报错一
    OCP-1Z0-051-V9.02-21题
    Windows API——OpenClipboard——剪切板
    如果在CEdit中实现Ctrl+V、Ctrl+C、Ctrl+X的功能
    OCP-1Z0-051-V9.02-18题
    OCP-1Z0-051-V9.02-17题
    OCP-1Z0-051-V9.02-15题
    OCP-1Z0-051-V9.02-14题
    OCP-1Z0-051-V9.02-12题
  • 原文地址:https://www.cnblogs.com/ACRykl/p/8067943.html
Copyright © 2011-2022 走看看