news 2026/7/7 20:17:04

【ACWing】110. 防晒(配数学证明)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【ACWing】110. 防晒(配数学证明)

题目地址:

https://www.acwing.com/problem/content/112/

C CC头奶牛进行日光浴,第i ii头奶牛需要m i n S P F [ i ] minSPF[i]minSPF[i]m a x S P F [ i ] maxSPF[i]maxSPF[i]单位强度之间的阳光。每头奶牛在日光浴前必须涂防晒霜,防晒霜有L LL种,涂上第i ii种之后,身体接收到的阳光强度就会稳定为S P F [ i ] SPF[i]SPF[i],第i ii种防晒霜有c o v e r [ i ] cover[i]cover[i]瓶。求最多可以满足多少头奶牛进行日光浴。

输入格式:
第一行输入整数C CCL LL
接下来的C CC行,按次序每行输入一头牛的m i n S P F minSPFminSPFm a x S P F maxSPFmaxSPF值,即第i ii行输入m i n S P F [ i ] minSPF[i]minSPF[i]m a x S P F [ i ] maxSPF[i]maxSPF[i]
再接下来的L LL行,按次序每行输入一种防晒霜的SPF和cover值,即第i ii行输入S P F [ i ] SPF[i]SPF[i]c o v e r [ i ] cover[i]cover[i]。每行的数据之间用空格隔开。

输出格式:
输出一个整数,代表最多可以满足奶牛日光浴的奶牛数目。

数据范围:
1 ≤ C , L ≤ 2500 1≤C,L≤25001C,L2500,
1 ≤ m i n S P F ≤ m a x S P F ≤ 1000 1≤minSPF≤maxSPF≤10001minSPFmaxSPF1000,
1 ≤ S P F ≤ 1000 1≤SPF≤10001SPF1000

问题等价于有若干区间,然后有若干点,这些点可能重合,当一个点落在一个区间里,这个点就能匹配一个区间。问这些点最多能匹配多少个区间。

思路是,先将区间按照右端点从小到大排序,然后遍历区间,对于每个区间,找到位置最小的点与之匹配;找不到的话,该区间就略过。

证明:假设上述方案叫A AA,另有某一个最优方案B BB不是这样操作的,我们考虑第一个选点不同的区间,设为I II。如果I IIA AA里被点x xx匹配,但是在B BB里没匹配,因为B BB是最优方案,所以x xxB BB里肯定匹配了某个区间,我们调整一下,让x xx去匹配I II,这样对于I II而言,两个方案一样了;如果I IIA AA里没匹配,但是在B BB里被x xx匹配,由于A AA是贪心策略,这是不可能的;如果I IIA AA里被x xx匹配,但是在B BB里被y yy匹配,那么y ≥ x y\ge xyx,我们在B BB里排序在I II之后的区间里找一个被x xx匹配的区间(如果不存在,那么在B BB里可以直接用x xx而不是y yy去匹配I II),设为J JJ,那么y yy一定能匹配J JJ,调整一下使得x xx匹配I IIy yy匹配J JJ。经过上面的调整,可以将两个方案调整成一样,从而贪心策略就是最优策略。

代码如下:

#include<algorithm>#include<iostream>#include<map>#include<vector>usingnamespacestd;usingPII=pair<int,int>;intc,l;vector<PII>v;map<int,int>mp;intmain(){scanf("%d%d",&c,&l);while(c--){intl,r;scanf("%d%d",&l,&r);v.push_back({l,r});}while(l--){inta,b;scanf("%d%d",&a,&b);mp[a]+=b;}sort(v.begin(),v.end(),[&](auto&p1,auto&p2){returnp1.second<p2.second;});intres=0;for(auto&p:v){intl=p.first,r=p.second;if(autoit=mp.lower_bound(l);it!=mp.end()&&it->first<=r){if(!--it->second)mp.erase(it);res++;}}printf("%d\n",res);}

时间复杂度O ( C log ⁡ ( C L ) ) O(C\log (CL))O(Clog(CL)),空间O ( L ) O(L)O(L)

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/7 11:25:06

2026毕设ssm+vue基于的作业管理系统论文+程序

本系统&#xff08;程序源码&#xff09;带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容一、选题背景 关于高校教务信息化问题的研究&#xff0c;现有研究主要以“教务系统整体框架升级”“大数据教学分析”为主&#xff0c;专门…

作者头像 李华
网站建设 2026/7/7 16:23:25

【ACWing】112. 雷达设备

题目地址&#xff1a; https://www.acwing.com/problem/content/description/114/ 假设海岸是一条无限长的直线&#xff0c;陆地位于海岸的一侧&#xff0c;海洋位于另外一侧。每个小岛都位于海洋一侧的某个点上。雷达装置均位于海岸线上&#xff0c;且雷达的监测范围为ddd&a…

作者头像 李华
网站建设 2026/7/7 15:37:12

2026毕设ssm+vue基于点餐系统论文+程序

本系统&#xff08;程序源码&#xff09;带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容一、选题背景&#xff08;≈300 字&#xff09; 关于餐饮线上销售系统的研究&#xff0c;现有研究主要以通用电商平台或单门店小程序为主&a…

作者头像 李华
网站建设 2026/7/7 17:35:19

2026毕设ssm+vue基于电子元件仓库管理论文+程序

本系统&#xff08;程序源码&#xff09;带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容一、选题背景 关于进销存管理问题的研究&#xff0c;现有研究主要以通用商贸类商品或大型 ERP 为核心&#xff0c;专门针对“电子元器件”这…

作者头像 李华
网站建设 2026/7/7 9:06:26

将结果按字典或元组格式输出

在 Python 中&#xff0c;将计算结果按字典或元组格式输出&#xff0c;核心是先把计算结果整理为字典 / 元组对象&#xff0c;再通过print()等方式输出。以下分字典输出和元组输出两大场景&#xff0c;结合实际计算案例详细讲解。一、按字典格式输出字典的核心是键值对&#xf…

作者头像 李华