题解 [ABC308F] Vouchers
题意
有
有
一个物品最多只能使用一张优惠券,每一张优惠券最多使用一次。
问最小花费。
分析
很简单的一道贪心题,但是赛时没有想出来。
首先将每一个物品的价格按升序排列,每一张优惠券按
接着依次遍历
要求最大的 priority_queue
即可。
代码
//the code is from chenjh
#include<cstdio>
#include<algorithm>
#include<queue>
int n,m;
int p[200002];
struct TIC{
int l,d;
TIC(int _l=0,int _d=0):l(_l),d(_d){}
bool operator < (const TIC& y)const{return l<y.l;}//重载运算符。
}t[200002];
std::priority_queue<int> Q;
int main(){
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++) scanf("%d",&p[i]);
std::sort(p+1,p+n+1);//将物品价格升序排列。
for(int i=1;i<=m;i++) scanf("%d",&t[i].l);
for(int i=1;i<=m;i++) scanf("%d",&t[i].d);
std::sort(t+1,t+m+1);//将优惠券升序排列。
long long ans=0;
for(int i=1,j=1;i<=n;i++){
for(;j<=m && t[j].l<=p[i];j++)Q.push(t[j].d);
int D=0;
if(!Q.empty())
D=Q.top(),Q.pop();//不为空(即有可用优惠券)就取出使用。
ans+=p[i]-D;
}
printf("%lld\n",ans);
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南