Merchant
题目描述
有\(n\)个物品,第\(i\)个物品有两个属性\(k_i,b_i\),表示它在时刻\(x\)的价值为\(k_i\times x+b_i\).
当前处于时刻\(0\),你可以选择不超过\(m\)个物品,使得存在某个整数时刻\(t,t≥ 0\),你选择的所有物品的总价值大于等于\(S\).
给出\(S\),求\(t\)的最小值。
输入输出格式
输入格式
第一行三个整数\(n,m,S\).
接下来\(n\)行,第\(i\)行两个整数\(k_i,b_i\).
输出格式
一行一个整数表示答案.
数据范围
对于所有数据,有\(1\le m\le n\le 10^6,-10^9 \le b_i \le 10^9,-10^6 \le k_i \le 10^6,0 \le S \le 10^{18}\).
数据保证有解,且答案不超过\(10^9\)。
- \(\text{Subtask}1(22\%)\), \(n ≤ 20\).
- \(\text{Subtask}2(36\%)\), \(n ≤ 10^5\),\(0 ≤ k_i ≤ 10^4\).
- \(\text{Subtask}3(8\%)\), \(k_i ≤ 0\).
- \(\text{Subtask}4(12\%)\), \(n ≤ 10^5\).
- \(\text{Subtask}5(22\%)\), 没有特殊的约束。
一开始大家都想二分\(t\)
但很快发现这样是不对哒
可事实上又是可以哒
\(t\)的造成的最大的可取集合在值域上要么单调增,要么先单减后单增。
对于后者,我们先判\(0\),然后二分就行了
发现这样如果sort是\(nlognlog1e9\)哒
但找第k大可以\(O(n)\)
实现是快排只进入一边
可以用\(nth\_element\)
Code:
#include <cstdio>
#include <algorithm>
#define ll long long
const int N=1e6+10;
int n,m;
ll k[N],b[N],d[N],S;
ll read()
{
ll x=0,f=1;char c=getchar();
while(c<'0'||c>'9') {if(c=='-') f=-f;c=getchar();}
while(c>='0'&&c<='9') {x=x*10+c-'0';c=getchar();}
return x*f;
}
bool check(ll t)
{
for(int i=1;i<=n;i++)
d[i]=k[i]*t+b[i];
std::nth_element(d+1,d+n-m,d+1+n);
ll sum=0;
for(int i=n;i>n-m;i--)
{
sum+=d[i]>0?d[i]:0;
if(sum>=S) return true;
}
return false;
}
int main()
{
scanf("%d%d",&n,&m);
S=read();
for(int i=1;i<=n;i++)
k[i]=read(),b[i]=read();
ll l=0,r=1e9;
if(check(l)) return puts("0"),0;
while(l<r)
{
ll mid=l+r>>1;
if(check(mid)) r=mid;
else l=mid+1;
}
printf("%lld\n",l);
return 0;
}
2018.10.6
雅礼集训 Day6 T1 Merchant 解题报告的更多相关文章
-
雅礼集训 Day7 T1 Equation 解题报告
Reverse 题目背景 小\(\text{G}\)有一个长度为\(n\)的\(01\)串\(T\),其中只有\(T_S=1\),其余位置都是\(0\).现在小\(\text{G}\)可以进行若干次以 ...
-
雅礼集训 Day6 T2 Equation 解题报告
Equation 题目描述 有一棵\(n\)个点的以\(1\)为根的树,以及\(n\)个整数变量\(x_i\).树上\(i\)的父亲是\(f_i\),每条边\((i,f_i)\)有一个权值\(w_i\ ...
-
「雅礼集训 2017 Day2」解题报告
「雅礼集训 2017 Day2」水箱 我怎么知道这种题目都能构造树形结构. 根据高度构造一棵树,在树上倍增找到最大的小于约束条件高度的隔板,开一个 \(vector\) 记录一下,然后对于每个 \(v ...
-
「雅礼集训 2017 Day1」 解题报告
「雅礼集训 2017 Day1」市场 挺神仙的一题.涉及区间加.区间除.区间最小值和区间和.虽然标算就是暴力,但是复杂度是有保证的. 我们知道如果线段树上的一个结点,\(max=min\) 或者 \( ...
-
雅礼集训 Day3 T3 w 解题报告
w 题目背景 \(\frac 14\)遇到了一道水题,双完全不会做,于是去请教小\(\text{D}\).小\(\text{D}\)看了\(0.607^2\)眼就切掉了这题,嘲讽了\(\frac 14 ...
-
雅礼集训 Day1 T3 画作 解题报告
画作 题目描述 小\(\mathrm{G}\)的喜欢作画,尤其喜欢仅使用黑白两色作画. 画作可以抽象成一个\(r\times c\)大小的\(01\)矩阵.现在小\(\mathrm{G}\)构思好了他 ...
-
雅礼集训 Day5 T3 题 解题报告
题 题目背景 由于出题人赶时间所以没办法编故事来作为背景. 题目描述 一开始有\(n\)个苹果,\(m\)个人依次来吃苹果,第\(i\)个人会尝试吃\(u_i\)或\(v_i\)号苹果,具体来说分三种 ...
-
雅礼集训 Day3 T2 u 解题报告
u 题目背景 \(\frac 14\) 遇到了一道水题,完全不会做,于是去请教小\(\text{D}\).小\(\text{D}\)看了一眼就切掉了这题,嘲讽了\(\frac 14\)一番就离开了. ...
-
雅礼集训 Day3 T2 v 解题报告
v 题目背景 \(\frac 14\)遇到了一道水题,又完全不会做,于是去请教小\(\text{D}\).小\(\text{D}\)看了\(0.607\)眼就切掉了这题,嘲讽了\(\frac 14\) ...
随机推荐
-
通过easyui tab添加的子页面JS脚本必须放在body才生效
通过easyui tab添加的子页面JS脚本必须放在body才生效 可通过Chrome查看元素时,head标签是否含有你自己写的JS代码
-
PHP常用正则表达式
正则表达式用于字符串处理.表单验证等场合,实用高效.现将一些常用的表达式收集于此,以备不时之需. 匹配中文字符的正则表达式: [\u4e00-\u9fa5] 评注:匹配中文还真是个头疼的事,有了这个表 ...
-
arduino入门学习实现语音控制LED灯
需要的准备的硬件arduino+PC+麦克风实现语音命令控制LED灯的亮灭. 首先需要将写好的arduino程序烧录到arduino uno主板中,下面是代码如下: int val;//定义变量val ...
-
详解UML中的聚合,关联,泛化等关系
1. Overview UML设计类中,类的关系分为Generalization(泛化),Dependency(依赖关系).Association(关联关系).Aggregation(聚合关系).Co ...
-
Js异步级联选择框实践方法
HTML: <li> <span>所在地区:</span> <select name="prov" id="ddl_prov&q ...
-
<;input type=";text";>;文本输人框
type类型: text 文本框 password 口令密码输人框 reset 重置或清除 buttou 命令按钮 checkbox 复选框 radio 单选框 submit 提交 fi ...
-
迄今最安全的MySQL?细数5.7那些惊艳与鸡肋的新特性(上)【转载】
转自: DBAplus社群 http://www.toutiao.com/m5762164771/ 迄今最安全的MySQL?细数5.7那些惊艳与鸡肋的新特性(上) - 今日头条(TouTiao.com ...
-
bzoj1106 树状数组
https://www.lydsy.com/JudgeOnline/problem.php?id=1106 一个叫做立方体大作战的游戏风靡整个Byteotia.这个游戏的规则是相当复杂的,所以我们只介 ...
-
verilog编码规范
verilog编码规范 1.Register with Rising-Edge Coding Example (Verilog) Flip-Flops and Registers Control Si ...
-
day33(sql)
操作数据库 增: create database 数据库名 character set utf8 删 drop database 数据库名称 改 alter database 数据库名称 charac ...