首页 > 其他分享 >洛谷 P11268 【MX-S5-T2】买东西题 做题记录

洛谷 P11268 【MX-S5-T2】买东西题 做题记录

时间:2024-11-09 13:56:48浏览次数:1  
标签:优惠券 洛谷 read T2 S5 int in2 物品 define

我不会贪心。

\(a\) 元的物品有 \(b\) 元的折扣,就相当于 \(a\) 元的物品有一张 \(a-b\) 元的优惠券。
因为一张优惠券是满 \(w\) 元才可以用,所以可以用的物品在价格 \(a\) 上是一段区间 \([a,\inf]\)。
有一个很朴素的想法是,将每一个物品最多能省多少钱先弄出来,然后用优惠券想办法把省的最小的钱换成优惠券。
先将物品和优惠券按满多少可以有优惠排序,再枚举优惠券,最后就是按照上面说的逐步加进去就好了。
想要快速求出最小值可以用优先队列,如果到最后还用不到优惠券的记得把打得折加进去。
时间复杂度 \(O(n \log n)\)。

点击查看代码
#include<bits/stdc++.h>
#define int ll
#define mem(a,b) memset((a),(b),sizeof(a))
#define m0(a) memset((a),0,sizeof(a))
#define lb(x) ((x)&-(x))
#define lc(x) ((x)<<1)
#define rc(x) (((x)<<1)|1)
#define pb(G,x) (G).push_back((x))
#define For(a,b,c) for(int a=(b);a<=(c);a++)
#define Rep(a,b,c) for(int a=(b);a>=(c);a--)
#define in1(a) a=read()
#define in2(a,b) a=read(), b=read()
#define in3(a,b,c) a=read(), b=read(), c=read()
#define inn(i,n,a) For(i,1,n) a[i]=read();

#define ll long long
#define i128 __int128

using namespace std;
inline int read() {
	int xx= 0;int f= 1;
	char c = getchar();
	while(c<'0'||c>'9') { 
		if(c=='-') f= -1;
		c= getchar();
	}
	while(c>='0'&&c<='9') {
		xx= (xx<<1)+(xx<<3)+(c^48);
		c= getchar();
	}
	return xx*f;
}
#define maxn 1000050
int n,m;
struct node {
	int x,y;
}a[maxn],b[maxn];
bool cmp(node a,node b) {
	return a.x==b.x?a.y>b.y:a.x>b.x;
}
int res=0;
signed main() {
	in2(n,m);
	For(i,1,n) {
		int x,y;
		in2(x,y);
		a[i].x=x,a[i].y=x-y;
		res+=a[i].x;
	}
	For(i,1,m) {
		in2(b[i].x,b[i].y);
	}
	int i=1;
	sort(a+1,a+n+1,cmp);
	sort(b+1,b+m+1,cmp);
	priority_queue<int,vector<int>,greater<int> > q;
	For(j,1,m){
		while(i<=n&&a[i].x>=b[j].x) q.push(a[i].y),i++;
		if(q.size()&&q.top()<b[j].y) {
			q.pop();
			q.push(b[j].y);
		}
	}
	while(i<=n) q.push(a[i].y),i++;
	while(q.size()) res-=q.top(),q.pop();
	cout<<res;
}

标签:优惠券,洛谷,read,T2,S5,int,in2,物品,define
From: https://www.cnblogs.com/CodingGoat/p/18536731

相关文章

  • 【题解】「NOIP2024模拟赛24 T2」子序列们
    【题解】「NOIP2024模拟赛24T2」子序列们https://www.becoder.com.cn/contest/5715/problem/2\(\mathcal{Description}\)给定一个0/1串\(a\),你需要生成一个长度为\(n\)的序列\(b\),其中\(b_i\)为\(a\)的一个子序列,且满足:\(|b_i|=n-i+1\);\(\foralli\in(1,n]\),\(b......
  • INT2067 Introduction to Programming
    Assignment1INT2067IntroductiontoProgrammingandProblemSolving2024-2025Semester1DueDate:October30,2024(Wednesday)1IntroductionInthisassignment,youneedtoimplementatext-basedgamebasedontheriddleaboutafarmerwhoneedstocros......
  • 洛谷题单指南-二叉堆与树状数组-P1168 中位数
    原题链接:https://www.luogu.com.cn/problem/P1168题意解读:中位数就是位于中间的数,前1个数的中位数是第1个,前3个数的中位数是第2个,前5个数的中位数的第3个...以此类推。所以,此题本质上就是动态维护一组数,每1/3/5...等奇数个取第k小的数,取一次后k++。解题思路:要动态维护数据,且每......
  • Springboot在线智慧办公系统8t202(程序+源码+数据库+调试部署+开发环境)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表员工,会议,云文档,通讯录,打卡签到,汇报活动,请假条,工资单,费用报销,付款凭证,采购申请,项目审批报告,领导,出差活动开题报告内容一、研究背景随着信息技术的......
  • 20241013 洛谷SCP模拟
    20241013洛谷SCP模拟J1.带余除法急眼了,J组T1做不出来。经cyq大神指点。考虑将题中给出的带余除法转化:\(n=kq+r\),移项得到\(r=n-kq\)。这里\(n,k\)都是定值,于是对于每一个\(q\),都有唯一的一个\(r\)与之对应。考虑余数的性质:\[0\ler=n-kq<q\]解不等式得到\(\lf......
  • RTT_t2 提示Expected to be given a valid DLL
    软件:RTT_t2 V2.60环境:WIN1064bit安装好RTT_t2后,运行软件出现以下错误:Traceback(mostrecentcalllast):File"rtt_t2.py",line1304,in<module>File"rtt_t2.py",line1041,inmainFile"bds\bds_jlink.py",line15,in__init__......
  • 洛谷P1157 组合的输出(Python)
    伤痕,是男子汉的勋章。——圣斗士星矢一、题目P1157组合的输出https://www.luogu.com.cn/problem/P1157二、代码defpri(L):foriinrange(len(L)):ifL[i]==True:print("{:3d}".format(i),end='')defdfs(n,r,cur,count):#n,r为题......
  • CS5366,typec转HDMI,4K60Hz多功能拓展坞方案,低成本替代GSV2201,AG9411方案
    集睿致远ASL新推出的CS5366芯片是一款Type-C转HDMI2Lean4K60的视频转换芯片通过USBType-C连接器将DPRX视频信号转换为HDMI/DVITX视频信号。DP信号转接只用2lane,另外2lane可以输出USB3.0/3.1信号,同时兼容PD3.0,并支持双向PD,相较于CS5266刷新率从30HZ上提升到60HZ,采样频率最......
  • 洛谷题单指南-二叉堆与树状数组-P2827 [NOIP2016 提高组] 蚯蚓
    原题链接:https://www.luogu.com.cn/problem/P2827题意解读:初始n个数,每次取最大值x,根据u/v分成两部分:x*u/v,x-x*u/v,然后其余数都增加q,整个过程重复m次。输出有两类数据:第t,2t,3t...次取出的最大值;最后剩余的数第t,2t,3t...个,从大到小输出。解题思路:直观上,通过模拟法可以实......
  • 洛谷P3870[TJOI20009]-开关
    时间复杂度越高的算法能模拟的结构就越多...题目大意:给定一串长度为n,元素只能为0或1的序列,默认该序列元素全为0.接下来需要进行m次操作,操作分为两种:1.把区间\([a,b]\)中的所有元素值取反.2.求区间\([a,b]\)中元素值为1的元素数量.每一次调用操作1时,每次一行输出一个......