Merchant
\(get\)二分新用法。
每道题都有答案范围提示,以前只是以为是用来提示用什么类型输出的。
从来没想过直接用它来二分。
这道题真的刷新了我的认知啊。。。。。。
整道题的复杂度是\(O(nlog1e9)\)。
具体做法是,先\(check\)一下0时刻满不满足要求,如果不满足再进行二分。
关于他为什么可以二分:
可以知道,价值是时间的一次函数,对于任意一个选中的物品的集合,我们将他们\(k、b\)加和,就可以得到对应的斜率与截距,并且,我们只关心同一个\(t\)下的最大值,画出图像,可以发现他是单调增/单调减/单谷函数。
两种单调函数显然可以二分。
单谷函数当左边可以满足要求时,一定会在\(check0\)时就得出答案。
能够二分时,满足要求的点一定在右边,所以当\(check\)为\(false\)时,直接缩下界即可。
进行\(check\)时先用二分到的\(t\)计算出价值,然后将前\(m\)个最大的加和,看是不是大于\(s\)。
Code
#include<bits/stdc++.h>
using namespace std;
namespace STD
{
#define rr register
typedef long long ll;
const int N=1e6+4;
ll n,m,s;
ll w[N];
struct node{ll k,b;}a[N];
ll read()
{
rr ll x_read=0,y_read=1;
rr char c_read=getchar();
while(c_read<'0'||c_read>'9')
{
if(c_read=='-') y_read=-1;
c_read=getchar();
}
while(c_read<='9'&&c_read>='0')
{
x_read=(x_read<<3)+(x_read<<1)+(c_read^48);
c_read=getchar();
}
return x_read*y_read;
}
bool cmp(const ll a_,const ll b_){return a_>b_;}
bool check(int t)
{
for(rr int i=1;i<=n;i++)
w[i]=a[i].k*t+a[i].b;
nth_element(w+1,w+1+m,w+1+n,cmp);
ll sum=0;
for(rr int i=1;i<=m;i++)
{
if(w[i]<0) continue;
if(sum+w[i]>=s) return 1;
sum+=w[i];
}
return 0;
}
};
using namespace STD;
int main()
{
n=read(),m=read(),s=read();
for(rr int i=1;i<=n;i++)
a[i].k=read(),a[i].b=read();
if(check(0))
{
cout<<0<<'\n';
return 0;
}
int l=1,r=1e9;
while(l<r)
{
int mid=(l+r)>>1;
if(!check(mid)) l=mid+1;
else r=mid;
}
printf("%d\n",l);
}
2021-08-09 20:34:26 星期一
Merchant的更多相关文章
- [最近公共祖先] POJ 3728 The merchant
The merchant Time Limit: 3000MS Memory Limit: 65536K Total Submissions: 4556 Accepted: 1576 Desc ...
- POJ 3278 The merchant
传送门 Time Limit: 3000MS Memory Limit: 65536K Description There are N cities in a country, and there i ...
- poj 3728 The merchant(LCA)
Description There are N cities in a country, and there is one and only one simple path between each ...
- ThoughtWorks Merchant's Guide To The Galaxy
ThoughtWorks笔试题之Merchant's Guide To The Galaxy解析 一.背景 在某网站上看到ThoughtWorks在武汉招人,待遇在本地还算不错,就投递了简历.第二天H ...
- [POJ 3728]The merchant
Description There are N cities in a country, and there is one and only one simple path between each ...
- opencart3图片Google Merchant Center验证通过不了的解决方法
最近在做一个opencart项目,有对接Google Merchant Center,但是一直提示产品图片验证无法通过,ytkah看了一下图片路径,/image/cache/catalog/demo/ ...
- 如何查看卖家ID (Merchant ID) 亚马逊哪里找?
如何查看卖家ID (Merchant ID) 亚马逊哪里找? 如何查看卖家ID (Merchant ID) 亚马逊哪里找? 1. 找到想要获取ID的卖家,点击店铺名(跟卖的卖家会收在”Other Se ...
- poj3728The merchant 【倍增】【LCA】
There are N cities in a country, and there is one and only one simple path between each pair of citi ...
- POJ 3728 The merchant(LCA+DP)
The merchant Time Limit : 6000/3000ms (Java/Other) Memory Limit : 131072/65536K (Java/Other) Total ...
- 雅礼集训 Day6 T1 Merchant 解题报告
Merchant 题目描述 有\(n\)个物品,第\(i\)个物品有两个属性\(k_i,b_i\),表示它在时刻\(x\)的价值为\(k_i\times x+b_i\). 当前处于时刻\(0\),你可 ...
随机推荐
- div 模拟alert弹出框
--------------信息展示弹出框---------------- <style> .over{background-color: rgba(0, 0, 0, 0.7);displ ...
- Hadoop 3.1.1 - Yarn 服务 - 总览
YARN 服务 总览 Yarn 服务框架为在 Yarn 原生环境里长时间运行的服务,提供了一流的支持和接口.简言之,它扮演了容器编排系统的角色,统一管理 Yarn 上运行的容器化服务.它同时支持 Do ...
- 修改Eureka的metadata脚本
最近研究了一下Spring Cloud的灰度发布, 发现方法真是多. 这里先提供一个修改Eureka注册中心里的instance实例的metadata的脚本, 可以方便地用来测试效果. 使用举例: s ...
- noi linux 2.0 体验
一.起因 下午,我打开 noi 官网准备报名 csp j/s,一看官网展板:"noi linux 2.0 发布" 我就兴奋了起来.(9 月 1 日起开始使用, 也就意味着 csp ...
- 跟你说个笑话,硕士毕业两年,月薪10k,天天面向CV编程
"枯燥乏味的一天,又tm要开始了". 早上10:00,程序员毛毛带着路上买的早餐,打开24英寸的显示屏,去某论坛查一下昨天没有解决的bug. 9 个小时增删改查.搬砖写代码的一天又 ...
- 我是如何在一晚上拿到阿里巴巴Android研发offer的?
图文无关 开篇 我找工作时是2018年. 那一年,BAT大量缩招,就业形势严峻,互联网寒冬消息蔓延. 最终我经过激烈角逐拼下了几个大厂offer,回顾往事,觉得分享出来,也许对你能有所借鉴. 简历 这 ...
- 【LeetCode】860. 柠檬水找零
860. 柠檬水找零 知识点:贪心 题目描述 在柠檬水摊上,每一杯柠檬水的售价为 5 美元. 顾客排队购买你的产品,(按账单 bills 支付的顺序)一次购买一杯. 每位顾客只买一杯柠檬水,然后向你付 ...
- SpringBoot开发十二-账号设置
需求介绍-账号设置 账号设置里面的上传头像(文件) 首先请求必须是一个 POST 请求,其次表单的属性 enctype = "multipart/form-data" 然后就是利用 ...
- Spring 学习笔记(3)Spring MVC
一.什么是 MVC MVC 实际上就是一种设计模式 Model-View-Controller Model 模型其实就是数据,Dao,Bean 等等 View 视图就是所看到的东西,网页,JSP,展示 ...
- NOIP 模拟 $12\; \text{简单的区间}$
题解 签到题 求区间和为 \(k\) 的倍数的区间,我们可以转化为求左右两个端点,其前缀和相等 对于区间最大值,我们可以把其转化为一个值,它能向左,向右扩展的最远边界,一个单调栈即可 我们设一个值 \ ...