zoukankan      html  css  js  c++  java
  • 1494: 连续子串和续

    1494: 连续子串和续

    http://www.acmore.net/problem.php?id=1494

    Time Limit: 10 Sec  Memory Limit: 128 MB
    Submit: 99  Solved: 18

    Description

    小Y要去参加一场笔试,这场笔试有N道题目,每道题目有不同的分值和难度,分别为ai和bi。小Y想知道从某一题开始,至少连续K道题目,分值的和与难度的和的比率最大是多少?

    Input

    若干组测试数据,每组测试数据占3行。

    第一行输出两个正整数N(1<=N<=10^6),K(1<=K<=N)。

    第二行N个正整数a1,a2...aN表示N道题目的分值,其中(1<=ai<=1000)。

    第三行N个正整数b1,b2...bN表示N道题目的难度,其中(1<=bi<=1000)。

    Output

    每组测试数据输出一个实数,表示满足题意的最大的比率,精确到小数点后4位。

    Sample Input

    5 3 1 2 3 4 5 1 1 3 4 5 3 1 100 200 300 3 2 1

    Sample Output

    1.2000 300.0000

    HINT

     

    Source

    Lyush

    设一个比例参数p,然后就是解决一个ai-p*bi的序列,至少连续K个,sum{ ai-p*bi } >= 0的问题了,二分枚举这个参数即可

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<cstring>
     4 #include<algorithm>
     5 
     6 using namespace std;
     7 
     8 #define eps 1e-8
     9 
    10 const int INF=0x3f3f3f3f;
    11 const int maxn=1000010;
    12 
    13 int n,k;
    14 int a[maxn],b[maxn];
    15 double num[maxn];
    16 
    17 int AC(double p){
    18     double tmp=INF;
    19     num[0]=0;
    20     for(int i=1;i<=n;i++)
    21         num[i]=num[i-1]+a[i]-p*b[i];
    22     for(int i=k;i<=n;i++){
    23         tmp=min(tmp,num[i-k]);
    24         if(num[i]-tmp>=0)
    25             return 1;
    26     }
    27     return 0;
    28 }
    29 
    30 double BinSearch(double l,double r){
    31     double mid,ans;
    32     while(r-l>eps){
    33         mid=(l+r)/2;
    34         if(AC(mid)){
    35             ans=mid;
    36             l=mid+eps;
    37         }else
    38             r=mid-eps;
    39     }
    40     return ans;
    41 }
    42 
    43 int main(){
    44 
    45     //freopen("input.txt","r",stdin);
    46 
    47     while(~scanf("%d%d",&n,&k)){
    48         for(int i=1;i<=n;i++)
    49             scanf("%d",&a[i]);
    50         for(int i=1;i<=n;i++)
    51             scanf("%d",&b[i]);
    52         printf("%.4lf\n",BinSearch(0,1000));
    53     }
    54     return 0;
    55 }
  • 相关阅读:
    06 is和==的区别 encode()编码 decode()解码
    05 dic的增删改查 字典的嵌套 考试题dic.get()的相关使用
    03 编码 int ,bool,str的常用操作 主要讲str
    01 基本数据类型 变量 if语句
    04 列表的增删改查 常用方法 元祖 range
    02 while循环 格式化输出 运算符
    多校2 Harmonious Army hdu6598 网络流
    P3159 [CQOI2012]交换棋子 网络流
    P2172 [国家集训队]部落战争 最大流
    P2402 奶牛隐藏 网络流
  • 原文地址:https://www.cnblogs.com/jackge/p/3019139.html
Copyright © 2011-2022 走看看