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/

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

  • 相关阅读:
    设计模式----工厂模式
    设计模式----简单工厂
    log4net使用详解
    link/Extended dependency 无法显示连接
    Abp框架之执行Update-Database 命令系列错误
    Index API
    使用Java客户端操作elasticsearch(二)
    elasticsearch之分词插件使用
    使用Java Low Level REST Client操作elasticsearch
    js如何获取隐藏的元素的高度
  • 原文地址:https://www.cnblogs.com/ACRykl/p/8067943.html
Copyright © 2011-2022 走看看