zoukankan      html  css  js  c++  java
  • codeforces 957C Three-level Laser

    题目链接:http://codeforces.com/contest/957/problem/C

    题意:输入n,u,给你n个数,严格单调递增,数据范围1e9.,然后让你选出三个数,下标分别为i,j,k,(i<j<k),且a[k]-a[i]<=u,求(a[k]-a[j])/(a[k]-a[i])的最大值。

    分析:显然题目要求的公式的最大值可化为(a[k]-a[j])/(a[j]-a[i]+a[k]-a[j]),要使比值最大,对于每一个i需要使a[j]-a[i]变小,a[k]-a[j]变大,由于题目给定a[k]-a[i]<=u,a[j]-a[i]最小即为j=i+1;这样我们只需要对于每一个i找到最大的k使得a[k]-a[i]<=u即为起始为i的函数的最大值。

    AC代码:

     1 #include<bits/stdc++.h>
     2 
     3 using namespace std;
     4 
     5 int n,u;
     6 int a[100005];
     7 int main(){
     8     ios_base::sync_with_stdio(0);
     9     cin.tie(0);
    10     while(cin>>n>>u){
    11         for(int i=1;i<=n;i++){
    12             cin>>a[i];
    13         }
    14         double re=-1;
    15         for(int i=1;i<=n;i++){
    16             int low=i+2,high=n;
    17             int result=-1;
    18             while(low<=high){
    19                 int mid=(low+high)/2;
    20                 if(a[mid]-a[i]<=u){
    21                     result=mid;
    22                     low=mid+1;
    23                 }
    24                 else {
    25                     high=mid-1;
    26                 }
    27             }
    28             if(result!=-1){
    29                 re=max(re,(double)(a[result]-a[i+1])/(double)(a[result]-a[i]));
    30             }
    31         }
    32         if(re==-1){
    33             cout<<-1<<endl;
    34         }
    35         else {
    36             cout<<fixed<<setprecision(9)<<re<<endl;
    37         }
    38     }
    39 return 0;
    40 }
    View Code
  • 相关阅读:
    Extjs常用的控件
    JasperReport导出
    spring配置连接池
    extjs中xtype类型

    凭什么!
    用心去做,多动脑思考
    闲着无事弄一下荒废已久的博客。。。

    视频下载工具 3.0
  • 原文地址:https://www.cnblogs.com/ls961006/p/8660547.html
Copyright © 2011-2022 走看看