B 供给和需求

这篇博客详细介绍了如何运用二分查找算法解决 ACM 中的一道供需问题。作者指出,由于数据规模大,不能直接枚举价格,而是需要一个 O(n log n) 的解决方案。通过二分价格并根据供需关系调整,可以找到使供需差绝对值最小的价格点。这个问题的解法类似于在两个有序序列中找中位数的 O(log(m+n)) 方法。
摘要由CSDN通过智能技术生成

ACM汇总学习:https://blog.csdn.net/weixin_39778570/article/details/83187443
题目链接:https://www.nowcoder.com/acm/contest/171/B

题意

n个买家,m个卖家,当物品价格上升的时候,买家需求下降,卖家供给减少,求供求与需求差绝对值最小。

解法

由于数据达到10w,枚举价格的话,时间是O(n2),显然会超时,所以需要一个O(nlogn)时间复杂度的算法。
由于题目是求最值问题,而且买家需求量和卖家供给量分别于物品价格呈递减和递增关系。故可以二分商品价格,根据供求关系调整商品价格,供大于求降价,供不应求涨价。
这到题的做法类似,两个排序好的序列求中位数O(log(m+n))做法。

Code
#include<bits/stdc++.h>
#define ll long long
#define fo(i,j,n) for(ll i=j; i<=n; ++i)
using namespace std;
ll n,m;
ll a[100005],b[100005],c[100005];
ll ans = 1e18;
ll xq
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值