题目描述

有$n$个物品,第$i$个物品有两个属性$k_i,b_i$,表示它在时刻$x$的价值为$k_i\times x+b_i$。
当前处于时刻$0$,你可以选择不超过$m$个物品,使得存在某个整数时刻$t,t\geqslant 0$,你选择的所有物品的总价值大于等于$S$。
给出$S$,求$t$的最小值。


输入格式

从文件$merchant.in$中读入数据。
第一行三个整数$n,m,S$。
接下来$n$行,第$i$行两个整数$k_i,b_i$。


输出格式

输出到文件$merchant.out$中。
一行一个整数表示答案。


样例

样例输入1:

3 2 100
3 9
-2 50
4 1

样例输出1:

13

样例输入2:

3 2 100
-1 49
-2 50
1 -998244353

样例输出2:

998244453


数据范围与提示

样例$1$解释:

选择$1,3$号物品。

样例$2$解释:

选择$3$号物品。

数据范围:

对于所有数据,有$1\leqslant m\leqslant n\leqslant 10^6,−10^9\leqslant b_i\leqslant 10^9,−10^6\leqslant k_i\leqslant 10^6,0\leqslant S\leqslant 10^{18}$。
数据保证有解,且答案不超过$10^9$。
$\bullet Subtask1(22\%)$,$n\leqslant 20$。
$\bullet Subtask2(36\%)$,$n\leqslant 10^5,0\leqslant k_i\leqslant 10^4$。
$\bullet Subtask3(8\%)$,$k_i\leqslant 0$。
$\bullet Subtask4(12\%)$,$n\leqslant 10^5$。
$\bullet Subtask5(22\%)$,没有特殊的约束。


题解

显然我们只会在最后一天将我们想买的这$m$件物品都买下。

所以答案满足单调性,二分天数即可。

但是坐观数据范围,我们显然不能在$judge$的时候用$sort$,否则最后$22$分跑不过去,所以可以用$nth\text{_}element$减掉一个$\log n$。

时间复杂度:$\Theta(n\log 10^9)$。

期望得分:$100$分。

实际得分:$100$分。


代码时刻

#include<bits/stdc++.h>
using namespace std;
int n,m;
long long S;
pair<int,int> e[1000001];
long long flag[1000001];
bool judge(int x)
{
for(int i=1;i<=n;i++)
flag[i]=1LL*e[i].first*x+e[i].second;
nth_element(flag+1,flag+n-m+1,flag+n+1);
long long res=0;
for(int i=n;i>n-m;i--)
{
if(flag[i]>0)res+=flag[i];
if(res>=S)return 1;
}
return 0;
}
int main()
{
scanf("%d%d%lld",&n,&m,&S);
long long sum=0;
for(int i=1;i<=n;i++)
{
scanf("%d%d",&e[i].first,&e[i].second);
sum+=e[i].second;
}
if(sum>=S)
{
puts("0");
return 0;
}
int lft=0,rht=1000000000,ans=1000000000;
while(lft<=rht)
{
int mid=(lft+rht)>>1;
if(judge(mid)){ans=mid;rht=mid-1;}
else lft=mid+1;
}
printf("%d\n",ans);
return 0;
}

rp++

最新文章

  1. DB2 JDBC
  2. The first day to learn Englisht
  3. Datatable 筛选条件、排序 和获取datagrid当前页面 数据
  4. Unity3D大风暴之入门篇(海量教学视频版)
  5. Xamarin Anroid App访问网站失败
  6. saltstack实战4--综合练习3
  7. 句柄(Handle)
  8. OpenWrt配置opkg.conf
  9. Bug列表
  10. OpenDialog文件多选
  11. POJ 1704 Georgia and Bob(阶梯Nim博弈)
  12. maven打包时跳过测试
  13. (转)silverlight应用程序中未处理的错误代码:2104 类别:InitializeError
  14. 树莓派上启动nfs server
  15. ubuntu sudo apt-get upgrade 和 sudo apt-get dist-upgrade区别
  16. 【技巧总结】Penetration Test Engineer[5]-Operating System Security(SQL Server、MySQL提权)
  17. netsh学习
  18. jsonp/ajax 自己的一些总结
  19. 转载--httpclient原理和应用
  20. 51nod1199:Money out of Thin Air(线段树)

热门文章

  1. python 正则表达式 re.sub &amp; re.subn
  2. 【FICO系列】SAP 财务帐与后勤不一致情况
  3. jdbc步骤:
  4. Spring MVC配置文件
  5. checkbox radio 多次操作失效
  6. java_第一年_JDBC(5)
  7. ZOJ-1610 线段树+两种查询方法(弥补我线段树区间填充的短板)
  8. 使用myBase Desktop来管理电脑上的资料
  9. 2018-5-5-UWP-和-WPF-对比
  10. linux 验证 NFS 是否成功