Peter算法小课堂—区间模型(2)

上次咋们讲了前两个区间模型:1.最大不重叠区间数 2.不重叠区间最少分组数。今天我们就学习:最小区间覆盖问题、区间重叠最厚层数!

最小区间覆盖

先看三道题

那么,第1题,它是浮点数的题,也就要求首尾相同。第2题,是整数型,也就要求首尾差1。

大家思考思考如何规划这个算法。

算法

将所有区间按左坐标从小到大排序,顺序处理每一个区间。每次选择覆盖点s的区间中右坐标最大的区间,并将s更新为此区间右坐标,直到选择的区间包含t。

算法证明

显然该算法的准确性是一定的,一下证明该算法的最小性。

所以,证毕。

实现

选择区间使用线性扫描进行。排序(O(nlog n))+扫描(O(n))=O(nlog n)

整数覆盖

整数覆盖对应着第二题,下面给出代码

#include <bits/stdc++.h>
using namespace std;
const int N=109;
struct piece{int s,t;};
bool cmp(const piece& a,const piece& b){
	return a.s<b.s||a.s==b.s&&a.t<b.t;
}
piece d[N];
int main(){
	int i,j,n;
	cin>>n;
	for(i=0;i<n;i++) cin>>d[i].s>>d[i].t;
	sort(d,d+n,cmp);
	int S=1,T=100,cnt=0;
	for(i=0;i<n&&S<=T;i++){
		for(j=i;j<n&&d[j].s<=S;j++)
			if(d[j].t>d[i].t) i=j;
			if(d[i].s>S) break;
			S=d[i].t+1;cnt++; 
	}
	if(S<=T) cout<<"sorry"<<endl;
	else cout<<cnt<<endl;
	return 0;
}

当然,浮点数覆盖也就只改了double,S=d[i].t和i<n&&S<T还有if(S<T),而已。

区间重叠最厚层数

给一道例题把

这里我们要将一个“扫描算法”(不是扫描线)。长这样👇

代码:

#include <bits/stdc++.h>
#define N 2005
using namespace std;
struct point{int pos,tag;};
bool cmp(const point&a,const point&b){
	return a.pos<b.pos||a.pos==b.pos&&a.tag>b.tag;
}
point d[N];
int main(){
	int n,cnt=0,ans=0;
	cin>>n;
	for(int i=0;i<n+n;i+=2){
		cin>>d[i].pos>>d[i+1].pos;
		d[i].tag=1;
		d[i+1].tag=-1;
	}
	sort(d,d+n+n,cmp);
	for(int i=0;i<n+n;i++){
		cnt+=d[i].tag;
		ans=max(ans,cnt);
	}
	cout<<ans<<endl;
	return 0;
}

我们每一次涂修正带用两格的地方存pos和tag,tag指的是标记,pos指的是从几到几。

当然,还有一种加权的类型,比如说,你在[S,T]区间内要涂R层修正带,看下一题。

399

题目描述

你作为西佳佳部落的首领,今天将面临n场其他部落的挑衅,你需要调度投石器去抵御外敌。为了消灭部落i派来的敌人,你需要ri个投石器,在时间si到ti进行战斗。你的投石器每一场战役打完无需休息,直接可以投入下一场战斗。请问你至少需要制造多少个投石器就能抵御所有外敌?

#include <bits/stdc++.h>
#define N 20005
using namespace std;
struct point{int pos,tag;};
bool cmp(const point&a,const point&b){
	return a.pos<b.pos||a.pos==b.pos&&a.tag<b.tag;
}
point d[N];
int main(){
	int n,cnt=0,ans=0;
	cin>>n;
	for(int i=0;i<n+n;i+=2){
		int h1,h2,m1,m2;char ch;
		cin>>h1>>ch>>m1>>ch>>h2>>ch>>m2>>d[i].tag;
		d[i].pos=h1*60+m1;
		d[i+1].pos=h2*60+m2;
		d[i+1].tag=-d[i].tag;
	}
	sort(d,d+n+n,cmp);
	for(int i=0;i<n+n;i++){
		cnt+=d[i].tag;
		ans=max(ans,cnt);
	}
	cout<<ans<<endl;
	return 0;
}

这里的tag变了哦。

希望这些对大家有用,三连必回。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

通过增加缓存优化斐波那契递归的冗余计算

一、python 斐波那契数列的递归实现存在大量的冗余计算。例如&#xff0c;为了计算fib(n)&#xff0c;我们需要计算fib(n-1)和fib(n-2)&#xff0c;但是在计算fib(n-1)的过程中&#xff0c;我们又会重复计算fib(n-2)。当n的值很大时&#xff0c;这种冗余计算会消耗大量的计算资…

机器学习:ROC曲线笔记

ROC曲线&#xff08;Receiver Operating Characteristic Curve&#xff09;是一种用于评估二分类模型性能的图形化工具&#xff0c;主要用于展示在不同阈值&#xff08;Threshold&#xff09;下模型的真阳性率&#xff08;True Positive Rate&#xff0c;TPR&#xff09;和假阳…

最新在线看4K高清电影网站推荐

随着互联网技术的发展&#xff0c;观看高清电影已经不再是难事。这里我为大家分享几个最新的在线看4K高清电影网站&#xff0c;让您在家就能享受到极致观影体验。 通过下面这个即可 1. 【超清影视】 【超清影视】是国内新兴的4K高清电影网站&#xff0c;拥有海量的影片资源&a…

【送书福利-第三十一期】《区块链安全理论与实践(安全技术经典译丛)》

&#x1f60e; 作者介绍&#xff1a;我是程序员洲洲&#xff0c;一个热爱写作的非著名程序员。CSDN全栈优质领域创作者、华为云博客社区云享专家、阿里云博客社区专家博主、前后端开发、人工智能研究生。公粽号&#xff1a;程序员洲洲。 &#x1f388; 本文专栏&#xff1a;本文…

幻兽帕鲁游戏官方更新了版本,联机时提示版本不适用,无法加入,怎么办?

如果你在登录游戏的时候提示&#xff1a;您正在尝试加入的比赛正在运行不兼容的游戏版本。请尝试升级游戏版本。此时就说明你需要更新部署在服务器内的幻兽帕鲁了。 1、如果你使用幻兽帕鲁应用模板部署游戏&#xff0c;那么可以选择使用游戏配置面板一键更新。 2、如果你使用一…

使用Xcode 真机无线调试

1.iPhone和Xcode连在同一WIFI下 2.打开Xcode 顶部菜单 选中Window -> Device and Simulators 3.选中Connect via network (注意&#xff1a;勾选前还要用数据线连接,测试机要设置密码,出弹窗的话要点击信任) 真机设备旁边出现小地球 就代表成功了

【ES】--ES集成热更新自定义词库(字典)

目录 一、问题描述二、具体实施1、Tomcat实现远程扩展字典2、验证生效3、ES配置远程扩展字典4、为何不重启ES能实现热更新 一、问题描述 问题现象: 前面完成了自定义分词器词库集成到ES中。在实际项目中词库是时刻在变更的&#xff0c;但又不希望重启ES&#xff0c;对此我们应…

书生·浦语大模型第四课作业

基础作业&#xff1a; 构建数据集&#xff0c;使用 XTuner 微调 InternLM-Chat-7B 模型, 让模型学习到它是你的智能小助手&#xff0c;效果如下图所示&#xff0c;本作业训练出来的模型的输出需要将不要葱姜蒜大佬替换成自己名字或昵称&#xff01; 1.安装 # 如果你是在 Int…

备战蓝桥杯---组合数学基础1

让我们来几道高中的组合题吧&#xff1a; 1.我们一定有n个向下&#xff0c;为 2.我们挑最大的两个&#xff0c;条件是他们奇偶性相同&#xff0c;为2*A10,2; 3.用捆绑法即可。 4.我们用隔板法&#xff0c;为 5.问题等价于23个相同的球放到3个盒子里&#xff0c;每个盒子至少…

如何使用ProcessStomping在可执行程序的字段部分执行Shellcode

关于ProcessStomping ProcessStomping是一款功能强大的Shellcode代码执行工具&#xff0c;该工具允许广大研究人员在目标可执行程序的指定字段部分执行Shellcode代码。 ProcessStomping实际上是Process Overwriting项目的一个升级版本&#xff0c;并且能够向目标应用程序的指…

2000-2021年县域指标统计数据库

2000-2021年县域统计数据库 1、时间&#xff1a;2000-2021年 2、来源&#xff1a;县域统计年鉴 3、范围&#xff1a;2500县 5、指标&#xff1a; 地区名称、年份、行政区域代码、所属城市、所属省份、行政区域土地面积平方公里、乡及镇个数个、乡个数个、镇个数个、街道办…

【Java程序设计】【C00253】基于Springboot的在线考试管理系统(有论文)

基于Springboot的在线考试管理系统&#xff08;有论文&#xff09; 项目简介项目获取开发环境项目技术运行截图 项目简介 这是一个基于Springboot的在线考试系统 本系统分为系统功能模块、管理员功能模块以及用户功能模块。 系统功能模块&#xff1a;系统登录&#xff0c;管理…

二层交换机配置以太网通道

实验大纲 二层聚合端口配置 1.构建网络拓扑结构图 2.修改交换机名字 3.创建聚合组进入聚合接口模式 4.将端口绑定到聚合端口&#xff08;接口模式&#xff09; 5.聚合接口下端口配置&#xff08;聚合接口模式) 6.具体配置 7.验证端口通道1的状态 8.配置ip 9.测试连通…

Learn LaTeX 017 - LaTex Multicolumn 分栏

在科学排版中进行分栏操作&#xff0c;能够有效的利用页面中的空间&#xff0c;避免空白位置的浪费。 好的分栏设计能对你的排版增色不少&#xff01; https://www.ixigua.com/7298100920137548288?id7307237715659981346&logTag949adb699806392430bb

centos中docker操作+安装配置django并使用simpleui美化管理后台

一、安装docker 确保系统是CentOS 7并且内核版本高于3.10,可以通过uname -r命令查看内核版本。 更新系统软件包到最新版本,可以使用命令yum update -y。 安装必要的软件包,包括yum-utils、device-mapper-persistent-data和lvm2。使用命令yum install -y yum-utils devic…

Android的常用Drawable讲解

今天来讲讲Android开发中水都绕不开的东西----drawable。最常使用的莫过于通过XML所声明的Drawable作为View背景&#xff0c;通过代码创建的应用场景则较少。其有着使用简单&#xff0c;比自定义view的成本要低的特点。同时&#xff0c;非图片类型的drawable占用空间较小&#…

Github 2024-02-12 开源项目日报 Top10

根据Github Trendings的统计&#xff0c;今日(2024-02-12统计)共有10个项目上榜。根据开发语言中项目的数量&#xff0c;汇总情况如下&#xff1a; 开发语言项目数量Rust项目3Python项目3JavaScript项目1TypeScript项目1C项目1C项目1PowerShell项目1非开发语言项目1 SubQuery…

ctfshow-php特性(web102-web115)

目录 web102 web103 web104 web105 web106 web107 web108 web109 web110 web111 web112 web113 web114 web115 实践是检验真理的 要多多尝试 web102 <?php highlight_file(__FILE__); $v1$_POST[V1]; $v2$_GET[v2]; $v3$_GET[v3]; $v4is_numeric($v2)and is…

EMNLP 2023精选:Text-to-SQL任务的前沿进展(下篇)——Findings论文解读

导语 本文记录了今年的自然语言处理国际顶级会议EMNLP 2023中接收的所有与Text-to-SQL相关&#xff08;通过搜索标题关键词查找得到&#xff0c;可能不全&#xff09;的论文&#xff0c;共计12篇&#xff0c;包含5篇正会论文和7篇Findings论文&#xff0c;以下是对这些论文的略…

英语语法之句法(一)

英语语法可能是很多人童年的噩梦&#xff0c;笔者就是其中之一&#xff0c;从小学学到高中&#xff0c;这么多年从来没有理解过英语语法&#xff0c;什么谓语&#xff0c;非谓语&#xff0c;副词&#xff0c;状语&#xff0c;等等概念混淆在一起&#xff0c;傻傻分不清。本来以…