题目描述

有$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++

[CSP-S模拟测试]:Merchant(二分答案)的更多相关文章

  1. [CSP-S模拟测试]:A(单调栈维护凸包+二分答案)

    题目传送门(内部题150) 输入格式 第一行两个整数$N,Q$. 接下来的$N$行,每行两个整数$a_i,b_i$. 接下来的$Q$行,每行一个整数$x$. 输出格式 对于每个询问,输出一行一个整数表 ...

  2. [CSP-S模拟测试]:maze(二分答案+最短路)

    题目传送门(内部题88) 输入格式 第一行两个数$n,m$.第二行四个数$sx,sy,tx,ty$.分别表示起点所在行数.列数,终点所在行数.列数.接下来$n$行,每行$m$个数,描述迷宫.最后一行一 ...

  3. [CSP-S模拟测试]:毛三琛(随机化+二分答案)

    题目传送门(内部题69) 输入格式 第一行正整数$n,P,k$.第二行$n$个自然数$a_i$.$(0\leqslant a_i<P)$. 输出格式 仅一个数表示最重的背包的质量. 样例 样例输 ...

  4. [CSP-S模拟测试]:kill(二分答案+贪心)

    题目传送门(内部题50) 输入格式 第一行包含四个整数$n,m,s$,表示人数.怪物数及任务交付点的位置.第二行包含$n$个整数$p_1,p_2,...,p_n$.第三行包含$n$个整数$q_1,q_ ...

  5. 主席树/线段树模拟归并排序+二分答案(好题)——hdu多校第4场08

    用主席树写起来跑的快一点,而且也很傻比,二分答案,即二分那个半径就行 主席树求的是区间<=k的个数 #include<bits/stdc++.h> using namespace s ...

  6. NOIP模拟:能源(二分答案)

    题目描述 小美为了拯救世界能源危机,她准备了 n 台蓄电池.一开始每台蓄电池有 ai 个单位的能量. 现在她想把 n 台蓄电池调整到能量相同.对于每台蓄电池可以给另一台蓄电池传递能量.但是会有能量损耗 ...

  7. Wannafly模拟赛 A.矩阵(二分答案+hash)

    矩阵 时间限制:1秒 空间限制:131072K 题目描述 给出一个n * m的矩阵.让你从中发现一个最大的正方形.使得这样子的正方形在矩阵中出现了至少两次.输出最大正方形的边长. 输入描述: 第一行两 ...

  8. 【noip模拟赛6】收入计划 最大值的最小值 二分答案

    描述 高考结束后,同学们大都找到了一份临时工作,渴望挣得一些零用钱.从今天起,Matrix67将连续工作N天(1<=N<=100 000).每一天末他可以领取当天及前面若干天里没有领取的工 ...

  9. [校内模拟赛T3]火花灿灿_二分答案_组合数学_贪心

    火花灿灿 题目: 数据范围: 题解: 这个题真的是个神仙题. 我们对于每块石头维护一个$01$串. 这个$01$串的长度是操作次数. 如果$01$串的当前位是$1$,表示这次操作中当前石子被划分到了贡 ...

随机推荐

  1. c++静态成员变量初始化时不受访问权限控制

    1.要在类外初始化,const 成员变量才能在类内初始化 2.初始化在类外,而不在main函数内 class A{ private: string name; A(){ name = "a& ...

  2. CSP2019 —— 今年欢笑复明年,不知退役在眼前

    关于2019CSP-J/-S的一些体会 又是一年退役季,想起在群里看到大佬的一句诗,感慨万千. 今年欢笑复明年,不知退役在眼前 于是便心生文意,随便写点东西来给自己康康. 先说说这次的成绩吧.大家应该 ...

  3. 聊聊NTLM认证协议

    近期发现多家安全媒体发布NTLM协议漏洞的文章.他们越说越术语,越说越官方,如此这般下去,他们写出来到底给谁看?大雅就是俗,让我来一篇俗文.啥是NTLM呢?微软windows系统的用户账号存储密码哈希 ...

  4. PTA第四周作业

    一.本周完成的作业 7-2 选择法排序 (20 分) 本题要求将给定的n个整数从大到小排序后输出. 输入格式: 输入第一行给出一个不超过10的正整数n.第二行给出n个整数,其间以空格分隔. 输出格式: ...

  5. Codeforces 396C (DFS序+线段树)

    题面 传送门 题目大意: 给定一棵树,每个点都有权值,边的长度均为1,有两种操作 操作1:将节点u的值增加x,并且对于u的子树中的任意一个点v,将它的值增加x-dist(u,v)*k, dist(u, ...

  6. html5实现拖拽上传

    <html><head> <meta http-equiv="Content-Type" content="text/html; chars ...

  7. OtterTune源码解析

    为了方便后面对ottertune进行魔(hu)改(gao),需要先搞清楚它的源码结构和pipeline OtterTune分为两大部分: server side: 包括一个MySQL数据库(用于存储调 ...

  8. socket中TCP的三次握手连接和四次握手释放

    三次握手连接 A: 我进来了啊 B:(有人来了安排个位子)回复:好的你进来吧 A:好的: 客户端向服务器发送一个SYN J 服务器向客户端响应一个SYN K,并对SYN J进行确认ACK J+1 客户 ...

  9. HTML水平居中和垂直居中的实现方式

    父元素是块元素,根据子元素不同分为以下几种: 1.子元素是行内元素: a.水平居中:在父元素上设置text-align:center; b.垂直居中:在行内子元素上设置行高与父元素相同line-hei ...

  10. InvalidMappingException提示Could not parse mapping document错误的解决方法

    转自:http://www.itzhai.com/invalidmappingexception-could-not-parse-mapping-document-prompt-the-wrong-s ...