IOI 2011 Rice Hub 米仓

题目

分析

首先来观察一下这题的数据范围,Subtask 4当中的数据量10^15大到惊人的程度。很显然这是我们所不能够处理的数据量。但转而看R的大小,就令人能够接受了,那么不难想到,这里有一个离散化的思路。

然后我们考虑如何安排这个米仓。这个米仓其实就相当于一个“中位数”,也就是安排在米仓能够处理的区间的正当中。

这里出现了一个“区间”的概念,那么我们就可以想到用一个类似二分的思想来枚举区间的左右边界。

首先O(R)枚举左边界,然后嵌一个while查右边界,写一个check函数来检查这个区间的可行性。check当中其实就是利用一个前缀和来计算钱数,然后和预算比较,返回true or false。

程序

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 const int MAXN = 100000 + 10;
 4 long long S[MAXN], R, x[MAXN], r, b, ans, t;
 5 bool check(int Left, int Right)
 6 {
 7     int hub_pos = (Left + Right) >> 1;
 8     long long Cost=1ll*x[hub_pos]*(hub_pos-Left+1)-S[hub_pos]+S[Left-1]+S[Right]-S[hub_pos]-1ll*x[hub_pos]*(Right-hub_pos);
 9     if (Cost <= b)
10         return true;
11     return false;
12 }
13 int main()
14 {
15     freopen("ricehub.in","r",stdin);
16     freopen("ricehub.out","w",stdout);
17     cin >> r >> t >> b;
18     for (int i = 1; i <= r; i++)
19     {
20         cin >> x[i];
21         S[i] = S[i-1] + x[i];
22     }
23     R = 1;
24     for (int L = 1; L <= r; L++)
25     {
26         while (R <= r && check(L,R))
27             R++;
28         ans = max(ans, R-L);
29     }
30     cout << ans << endl;
31     return 0;
32 }

原文地址:https://www.cnblogs.com/OIerPrime/p/9061925.html

时间: 2024-10-09 21:30:56

IOI 2011 Rice Hub 米仓的相关文章

lydsy 2600(二分+中位数前缀和)米仓

2600: [Ioi2011]ricehub Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 691  Solved: 359[Submit][Status][Discuss] Description 乡间有一条笔直而长的路称为"米道".沿着这条米道上 R 块稻田,每块稻田的坐标均为一个 1 到 L 之间(含 1 和 L)的整数.这些稻田按照坐标以不减的顺序给出,即对于 0 ≤ i <R,稻田 i 的坐标 X[i]满足 1 ≤ X[

2600 米仓 大视野评测

Description 乡间有一条笔直而长的路称为"米道".沿着这条米道上 R 块稻田,每块稻田的坐标均为一个 1 到 L 之间(含 1 和 L)的整数.这些稻田按照坐标以不减的顺序给出,即对于 0 ≤ i <R,稻田 i 的坐标 X[i]满足 1 ≤ X[0] ≤ ... ≤ X[R-1] ≤ L. 注意:可能有多块稻田位于同一个坐标上. 我们计划建造一个米仓用于储存尽可能多的稻米.和稻田一样,米仓将建在米道上,其坐标也是一个 1 到 L 之间的整数(含 1 和 L).这个米仓

IOI2011ricehub米仓

Description 乡间有一条笔直而长的路称为"米道".沿着这条米道上 R 块稻田,每块稻田的坐标均为一个 1 到 L 之间(含 1 和 L)的整数.这些稻田按照坐标以不减的顺序给出,即对于 0 ≤ i <R,稻田 i 的坐标 X[i]满足 1 ≤ X[0] ≤ ... ≤ X[R-1] ≤ L. 注意:可能有多块稻田位于同一个坐标上. 我们计划建造一个米仓用于储存尽可能多的稻米.和稻田一样,米仓将建在米道上,其坐标也是一个 1 到 L 之间的整数(含 1 和 L). 这个米

BZOJ 2600 IOI 2011 ricehub 二分

题目大意:给出粮食的位置,给出初始的钱数,问粮仓设在哪里会让收到的粮食最多.粮食运到粮仓需要花费|x - x'|的费用. 思路:看到L和B的范围都大的惊人,只能从R来下手.能不能从每个粮食的位置入手来搞点什么. 首先要想收购的尽量多,收购的粮食应该是一段连续的区间.对于每个粮食的位置,以这个粮食的位置为起点所能够收购到的粮食是单调的.这个就可以二分来确定了.一段区间内到达所有点最近的点是中位数,所以就可以O(1)判断了. (这真的是IOI题么.. CODE: #include <cstdio>

[IOI 2011]Race

Description 给一棵树,每条边有非负权.求一条简单路径,权值和等于K,且边的数量最小.N <= 200000, 1 <= K <= 1000000 Input 第一行 两个整数 n, k 第二..n行 每行三个整数 表示一条无向边的两端和权值 (注意点的编号从0开始) Output 一个整数 表示最小边数量 如果不存在这样的路径 输出-1 Sample Input 4 3 0 1 1 1 2 2 1 3 4 Sample Output 2 转载自Navi_Awson的博客:ht

亚哪脚易馅窗缆泄劣杆欣才

KALW凑赫恋煤擞卮母父亢http://share.renren.com/share/358248275/18104788318?0q2u=c0g=2c DCZN钒氖肥敢腋孛卸易翰http://blog.renren.com/share/358248275/18104788318?4i4c=4Ca=CS QZGU由衫趴友闻烂丶乌敌http://share.renren.com/share/232346864/18104788320?0kEC=0ky=W6 VZAO蚁囊的沮自毒俺苍惫http://

bzoj2600 [Ioi2011]ricehub

Description 乡间有一条笔直而长的路称为“米道”.沿着这条米道上 R 块稻田,每块稻田的坐标均为一个 1 到 L 之间(含 1 和 L)的整数.这些稻田按照坐标以不减的顺序给出,即对于 0 ≤ i <R,稻田 i 的坐标 X[i]满足 1 ≤ X[0] ≤ ... ≤ X[R-1] ≤ L. 注意:可能有多块稻田位于同一个坐标上. 我们计划建造一个米仓用于储存尽可能多的稻米.和稻田一样,米仓将建在米道上,其坐标也是一个 1 到 L 之间的整数(含 1 和 L).这个米仓可以建在满足上述

小米的成功可以复制?

一: 2010年4月,一个新的手机品牌横空出世,那就是小米.雷军说,我们要用互联网思维卖手机,我们的手机是为发烧友而生. 小米之前,对于一部手机来说,它的配置高,也就意味着它的价格绝对不低,所以,对于极大多数的普通用户来说,他们能买到的手机,往往都是卡.慢.丑.尤其是对于爱折腾的年轻人来说,这种手机是不可忍受的,他们期望能有一款这样的手机,配置高,价格可以接受,也就是俗称的性价比要高.于是,当小米喊着“为发烧友而生”的口号进入这个市场的时候,这些用户们沸腾了.激动了.疯狂了.因为他们终于等到了这

bzoj 2600 ricehub

2600: [Ioi2011]ricehub Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 783  Solved: 417[Submit][Status][Discuss] Description 乡间有一条笔直而长的路称为"米道".沿着这条米道上 R 块稻田,每块稻田的坐标均为一个 1 到 L 之间(含 1 和 L)的整数.这些稻田按照坐标以不减的顺序给出,即对于 0 ≤ i <R,稻田 i 的坐标 X[i]满足 1 ≤ X[