zoukankan      html  css  js  c++  java
  • bzoj 2600 ricehub

    2600: [Ioi2011]ricehub

    Time Limit: 10 Sec  Memory Limit: 128 MB
    Submit: 783  Solved: 417
    [Submit][Status][Discuss]

    Description

    乡间有一条笔直而长的路称为“米道”。沿着这条米道上 R 块稻田,每块稻田的坐标均
    为一个 1 到 L 之间(含 1 和 L)的整数。这些稻田按照坐标以不减的顺序给出,即对于 0 ≤ i <
    R,稻田 i 的坐标 X[i]满足 1 ≤ X[0] ≤ ... ≤ X[R-1] ≤ L。 
    注意:可能有多块稻田位于同一个坐标上。 
    我们计划建造一个米仓用于储存尽可能多的稻米。和稻田一样,米仓将建在米道上,其
    坐标也是一个 1 到 L 之间的整数(含 1 和 L)。这个米仓可以建在满足上述条件的任一个位
    置上,包括那些原来已有一个或多个稻田存在的位置。 
    在收获季节,每一块稻田刚好出产一滿货车的稻米。为了将这些稻米运到米仓,需要雇
    用一位货车司机来运米。司机的收费是每一满货车运送一个单位的距离收取 1 元。換言之,
    将稻米从特定的稻田运到米仓的费用在数值上等于稻田坐标与米仓坐标之差的绝对值。 
    不幸的是,今年预算有限,我们至多只能花费 B 元运费。你的任务是要帮我们找出一个
    建造米仓的位置,可以收集到尽可能多的稻米。 

    Input

    第一行 三个整数 R L B
    接下来R行 每行一个整数 表示X[i]

    Output


    一个整数 最多稻米数

    Sample Input


    5 20 6
    1
    2
    10
    12
    14

    Sample Output


    3
    HINT
    1 ≤ R ≤ 100,000
    1 ≤ L ≤ 1,000,000,000
    0 ≤ B ≤ 2,000,000,000,000,000
    【题目大意】
    找一个点 使他在价值现值内控制最多的点。
    【吐槽】long long保平安
    【code】
    #include<iostream>
    #include<cstdio>
    using namespace std;
    int R,L,ans,x[100005]; 
    long long B,sum[100005];
    long long cost(int l,int r) {
        int m=(l+r)/2;
        long long tmp=(m-l+1)*x[m]-(sum[m]-sum[l-1])+sum[r]-sum[m]-(r-m)*x[m];
        return tmp;
    }
    int main() {
        scanf("%d%d%lld",&R,&L,&B);
        for(int i=1; i<=R; i++) {
            scanf("%d",&x[i]);
            sum[i]=sum[i-1]+x[i];
        }
        for(int i=1,j=1; j<=R; j++) {
            while(cost(i,j)>B)i++;
            ans=max(ans,j-i+1);
        }
        printf("%ld
    ",ans);
        return 0;
    }
  • 相关阅读:
    多媒体开发之图像---帧与场的区别
    Python之Python 安装环境搭建
    c/c++ c的第一个编译器
    多媒体开发之 H.264中NALU、RBSP、SODB的关系 (弄清码流结构)
    多媒体开发之h264中的sps---sps信息提取之帧率
    haproxy有关session的问题
    php的安装
    centos 6.5上部署jetty
    设置浏览器的颜色
    sed awk grep三剑客常用
  • 原文地址:https://www.cnblogs.com/zzyh/p/7041302.html
Copyright © 2011-2022 走看看