ABC 289 G - Shopping in AtCoder store 数学推导+凸包

大意:
n个顾客,每个人有一个购买的欲望bi,m件物品,每一件物品有一个价值ci,每一个顾客会买商品当且仅当bi+ci>=定价.

现在要求对每一个商品定价,求出它的最大销售值(数量*定价)

n,m<=2e5

思路:

首先m件物品都是相互独立的,可以看成m个询问

另外,不妨对n个人的购买力做一个降序排序,显然它们满足单调性

不难发现,一旦我们定下了物品的价格,那么最终的销售额就由销售数量决定,也就是会有多少人买。此时在销售数量减少的情况下,我们一定会尽可能地抬高价格。从而我们得到一个结论:每一个商品i的定价一定是bj+ci(1<=j<=n).这是因为,它刚好可以使某个人会买这件商品。假设最优定价不满足这个结论,显然我们可以直接抬高它使其达到另一个bj+ci,此时我们在购买人数不变的情况下就提高了单价,这是更优的。

现在商品单价就只有n个选择了,对于商品i,我们的销售额就是max{j*(bj+ci)}(1<=j<=n),因为我们是按购买力降序排序,如果第j个人刚好买的起,那么前面的人一定都买的起(这里也不用关心购买力重复的问题,因为重复的话,后面相同购买力的的人对应的决策一定会更好)。

此时我们就转化了题意:对于一个i(1<=i<=m),找到max{j*(bj+ci)}


继续

 如果放到坐标系下来看的话(遇到双变量时,放到坐标系下往往是个不错的选择),我们令横坐标为ci(选择i也是可以的,因为i跟ci是一一对应的,但是考虑到我们是在对不同的价值做取舍,取ci会更加方便一点),纵坐标为对应的价值 , 也就是 j*(bj+ci),不同j的选择对应不同的总价值。

我们将ci表示成x,那么原本要求的值 max{j*(bj+ci)}(1<=j<=n) 转化为max{j*(bj+x)}=max{jx+j*bj},可以发现里面是一条直线的表达式。显然我们最后是要找一个这些直线在每一个横坐标下对应的最大值,也就是转化成了一个凸包。最后的答案就是横坐标对应的凸包上的点的纵坐标了

这里借一下官方题解的图片:

求凸包的话,我们从1-n开始遍历的话,直线的斜率是单调递增的,

 不妨用单调栈来更新当前段的最大值对应的直线

假设当前栈内有两条直线L0,L1,交点为X_01,那么对于新加入的直线L',如果它与L0的交点X_1'的横坐标小于X_01的横坐标,显然就可以把L1淘汰掉了,因为它后面也不会有比L‘更大的机会了。

关于这个判断,就只要计算一下交点横坐标就可以了。

最后我们得到了一个凸包,那么对于一个ci,我们去二分找到它在那一段线段上就可以了

时间复杂度O(n+mlogn)

code

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define endl '\n'
#define mk make_pair
const ll N=2e5+10;
ll n,m;
ll b[N];
ll c[N];
struct P
{double x,y;
};
vector<pair<double,P>> vt;
double cross(P p1,P p2,P p3) {return (p2.x-p1.x)*(p3.y-p1.y)-(p3.x-p1.x)*(p2.y-p1.y);
}
bool judge(ll x,ll tar)
{return vt[x].first<=tar;
}
void solve()
{cin>>n>>m;for(int i=1;i<=n;++i) cin>>b[i];sort(b+1,b+1+n,greater<ll>());for(int i=1;i<=m;++i) cin>>c[i];for(int i=1;i<=n;++i){P p={(double)i,(double)i*b[i]};//y=ix+i*b[i]//上文说过直线可以用jx+j*b[j],所以我们就直接用两个参数来表示对应的直线,可以说p就代表一条直线while(vt.size()>=2&&cross(p,vt.rbegin()->second,(next(vt.rbegin()))->second)<0) vt.pop_back();
//cross函数是在计算新加入的直线是否要把里面这一条直线弹出,也就是在计算交点横坐标是否满足条件。这个可以自己推一下//弹出无用的直线double x=0;if(vt.size()){P pp=vt.back().second;x=(pp.y-p.y)/(p.x-pp.x);} vt.push_back(make_pair(x,p));}	ll len=vt.size();
//	for(auto i:vt)
//	{
//		cout<<i.second.x<<" "<<i.second.y<<endl;
//	}for(int i=1;i<=m;++i){ll l=0,r=len-1;while(l<=r){ll mid=l+r>>1;if(judge(mid,c[i])) l=mid+1;else r=mid-1;}P op=vt[l-1].second;cout<<(ll)(op.x*c[i]+op.y)<<" ";}
}
int main()
{ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
//	ll t;cin>>t;while(t--)solve();return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/59843.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

《 Istio 权威指南 》重磅发行!华为云云原生团队匠心著作

由 Istio 社区指导委员会成员和华为云云原生团队联合编著的云原生服务网格书籍《 Istio 权威指南》重磅上市&#xff01;《 Istio 权威指南》包含云原生服务网格原理、实践、架构、源码四大技术篇章&#xff0c;内容权威、系统、详实&#xff0c; 凝聚华为云云原生团队在 Istio…

代季峰教授:超大规模视觉通用模型最新研究成果分享

追踪社会热点&#xff0c;解读 AI 前沿&#xff0c;用开源的算法&#xff0c;促进 AI 知识渗透&#xff0c;以超算/高性能计算为原点&#xff0c;开启人工智能前沿应用视角。OpenMMLab 开源社区联合北京超级云计算中心&#xff0c;共同发布直播栏目【AI 奇妙夜】&#xff0c;每…

最全语言模型领域知识评估Benchmark——獬豸:包含了516门学科、13学科门类、240w条数据

论文链接&#xff1a;https://arxiv.org/abs/2306.05783 代码链接&#xff1a;https://github.com/MikeGu721/XiezhiBenchmark 复旦大学肖仰华团队——獬豸&#xff08;Xiezhi&#xff09;是一套针对语言模型&#xff08;LM&#xff09;的领域评估Benchmark。它由249587道多选…

第3期大模型前沿讲习班报名中,顶尖专家面授,多角度系统培训

人工智能研究与应用范式正经历一场剧变&#xff0c;越来越多的顶级团队和杰出人才纷纷加入这一变革浪潮。作为AI大模型科研先锋&#xff0c;智源研究院携手一批卓越的学者与工程师&#xff0c;致力于将尖端技术与经验传授给有潜力的学习者&#xff0c;通过高效的学习方式&#…

ChatGPT安卓版正式发布,附安装包,但有款手机无法使用

ChatGPT安卓版如约而至&#xff0c;OpenAI正式宣布该应用已在谷歌应用商店上架&#xff0c;用户可以免费下载&#xff0c;对话不限次数。 但是安卓版ChatGPT目前仅在美国、印度、孟加拉国和巴西提供下载&#xff0c;下周将会推广至更多国家。 网页端下载链接&#xff1a; http…

Langchain+本地大语言模型进行数据库操作的实战代码

大家好,我是herosunly。985院校硕士毕业,现担任算法研究员一职,热衷于机器学习算法研究与应用。曾获得阿里云天池比赛第一名,CCF比赛第二名,科大讯飞比赛第三名。拥有多项发明专利。对机器学习和深度学习拥有自己独到的见解。曾经辅导过若干个非计算机专业的学生进入到算法…

NC 财务相关问题

一、NC 银行对账查询不到单位日记账&#xff1f; 答&#xff1a;检查对账账户关联的会计科目辅助的组合在银行对账的查询期间是否有凭证&#xff0c;如对账账户初始化未勾选包含未记账&#xff0c;还需凭证记账后才可以查询出来。 二、有借款未清的人员要离职&#xff0c;如何…

音视频技术开发周刊 | 294

每周一期&#xff0c;纵览音视频技术领域的干货。 新闻投稿&#xff1a;contributelivevideostack.com。 五问「ChatGPT医学影像」&#xff1a;新一代的 AI 能否成为放射科医生的一把利器&#xff1f; 在医学等专业性较强的领域内&#xff0c;ChatGPT的表现还不够好&#xff0c…

2022年最值得安装的4款PC软件,每一款都是精品

1.鲸鱼办公网 这是一个PPT模板资源网站&#xff0c;不仅提供了免费实用的PPT模板&#xff0c;还提供了简历模板、字体字库、办公教程、平面设计等&#xff0c;1200多个全套视频课件。对设计感兴趣的朋友可以到里面看看&#xff0c;说不定会有另外收获哦&#xff01; 2.AirMore …

新买了台笔记本电脑,分享些实用的Windows软件

苏生不惑第263 篇原创文章&#xff0c;将本公众号设为星标&#xff0c;第一时间看最新文章。 前几天618的时候在京东新买了台联想笔记本电脑thinkbook&#xff0c;就是这台&#xff1a;当时价格5499&#xff0c;系统配置如图&#xff0c;话说Windows11都来了&#xff0c;有人开…

基于股票信息的数据分析与可视化

基于股票信息的数据分析与可视化 项目简介&#xff1a;采用皮尔逊相关系数研究A股开盘前十分钟成交量变化与当日收盘价变化的相关性&#xff0c;最后将数据导入到Excel中做可视化分析。 结论&#xff1a;大部分都没有很强的相关性。 import baostock as bs import pandas as p…

「太阁干货」华为模拟器eNSP安装教程

最近小伙伴们在观看太阁6IE讲师 闫辉老师的直播课中&#xff0c;会使用到华为模拟器eNSP&#xff0c;今天给大家分享一下如何对华为eNSP模拟器进行初始化安装。 今天分享的内容主要有以下几个板块&#xff1a; step 1:文件下载&#xff1a; 所需要的文件如下 一共需要5个文件…

网络链路不稳定的排查问题方法

概述 当客户端访问目标服务器出现ping丢包或ping不通时&#xff0c;可以通过tracert或mtr等工具进行链路测试来判断问题根源。本文介绍如何通过工具进行链路测试和分析。 详细信息 本文分别介绍如下链路测试方法。 链路测试工具测试结果的简要分析常见的链路异常场景链路测试…

计算机网络波动大,网络不稳定是什么原因?

当我们的电脑网络不稳定&#xff0c;网络波动大&#xff0c;网络卡顿不顺畅时&#xff0c;我们应该怎么办呢&#xff1f;今天就和大家一起聊聊网络不稳定是什么原因&#xff0c;我们可以怎么解决&#xff01; 一、设备问题引发网速不稳定现象 1.【网线故障问题】由于网线水晶头…

pdf打开口令破解

PDF文件设置打开口令&#xff0c;有可能是自己设置的打开密码时间久了忘记了&#xff0c;也有可能是在网上下载的pdf资源打开的时候需要输入打开密码&#xff0c;那么遇到这种不知道破地方打开口令或者忘记打开口令的情况&#xff0c;并且文件内容对你很重要的话&#xff0c;可…

【口令破解】远程口令破解和本地口令破解(crunch 字典工具和hydra工具)

目录 1 口令安全威胁1.1 口令安全概述1.2 口令安全现状1.2.1 弱口令1.2.2 默认口令1.2.3 明文传输 2 口令破解2.1 暴力破解2.2 字典破解2.2.1 弱口令字典2.2.2 社工字典2.2.3 字符集字典crunch的**用法**如下&#xff1a;crunch生成密码字典实例&#xff1a;简单介绍字典 3 远程…

弱口令及其防御

常见的弱口令分为默认型弱口令和社工型弱口令。 一.默认型弱口令 1.系统服务弱口令 sshftptelnetsnmp 2.应用组件弱口令 tomcatweblogicredismysqlmongoDBrsyncmemcache 3.设备弱口令 (1)路由器弱口令 tp-linkTendaD-linkMERCURY (2)安全设备弱口令 绿盟(weboper/nsfoc…

弱口令扫描工具mysql ftp_超级弱口令检查工具

超级弱口令检查工具是一款Windows平台的弱口令审计工具&#xff0c;支持批量多线程检查&#xff0c;可快速发现弱密码、弱口令账号&#xff0c;密码支持和用户名结合进行检查&#xff0c;大大提高成功率&#xff0c;支持自定义服务端口和字典。 介绍 工具采用C#开发&#xff0c…

万能命令

在日常工作生活中下载文档资料、网上购物、看电影追剧&#xff0c;早已成为生活的中的一部分&#xff0c;在面对这些生活工作必要内容你是是怎么办的呢&#xff1f;还在花钱下载文档&#xff1f;追剧开会员吗&#xff1f;今天就教你无需任何工具&#xff0c;只需要几个简单的命…

9月1日5G商用,你的4G变慢了吗?

近日&#xff0c;据运营商财经网报道&#xff0c;相关人士透露&#xff0c;三大运营商即将于9月1日对5G商用&#xff0c;也就是一个星期之后&#xff0c;中国正式进入5G时代。 这与6月5G牌照发放时三大运营商表示将在今年9月底前在40城提供5G服务的计划一致。 此外&#xff0c;…