当前位置: 首页 > news >正文

CSP-S 2021 T1廊桥分配

CSP-S 2021 T1廊桥分配

枚举分配给国内航班和国外航班的廊桥数量,若分配给国内机场 i i i个廊桥,则国外机场就有 n − i n-i ni个廊桥,在此基础上分别判断两边各能通过多少飞机。用一个小根堆存储飞机离开的时间,枚举到一个飞机到达的时间时,将小根堆中的这个到达时间之前的点弹出,复杂度 O ( n ( m 1 + m 2 ) ) O(n(m1+m2)) O(n(m1+m2)),可以通过 n ≤ 5000 , m 1 + m 2 ≤ 5000 n\leq5000,m_1+m_2\leq5000 n5000,m1+m25000的数据,拿到 40 40 40分(实际 45 45 45分)。

#include <bits/stdc++.h>
#define A 100010using namespace std;
struct node {int a, b;friend bool operator < (const node x, const node y) {if (x.a != y.a) return x.a < y.a;else return x.b < y.b;}
}e1[A], e2[A];
int n, m1, m2, ans;int main(int argc, char const *argv[]) {cin >> n >> m1 >> m2;for (int i = 1; i <= m1; i++) {scanf("%d%d", &e1[i].a, &e1[i].b);}for (int i = 1; i <= m2; i++) {scanf("%d%d", &e2[i].a, &e2[i].b);}sort(e1 + 1, e1 + m1 + 1);sort(e2 + 1, e2 + m2 + 1);priority_queue<int, vector<int>, greater<int> > q;for (int i = 0; i <= n; i++) {int ti = i, tj = n - i;int sum1 = 0, sum2 = 0;if (ti == 0) {sum1 = 0;}else {while (q.size()) q.pop();for (int j = 1; j <= m1; j++) {while (!q.empty() and e1[j].a >= q.top()) q.pop(), ti++;if (ti - 1 >= 0) {sum1++;q.push(e1[j].b);ti--;}}}if (tj == 0) {sum2 = 0;}else {while (q.size()) q.pop();for (int j = 1; j <= m2; j++) {while (!q.empty() and e2[j].a >= q.top()) q.pop(), tj++;if (tj - 1 >= 0) {sum2++;q.push(e2[j].b);tj--;}}}ans = max(ans, sum1 + sum2);}cout << ans << endl;
}

假设已经有 n n n架飞机通过 m m m个廊桥完成了降落,如果此时来了第 n + 1 n+1 n+1架飞机,那么这架飞机不会影响之前 n n n架飞机的降落情况(具体降落在哪个廊桥)。所以我们可以模拟出每架飞机降落时所抵达的廊桥编号,同时也就知道了每个廊桥降落过飞机的数量。
例如编号为 1 1 1的廊桥降落过 3 3 3架飞机,编号为 2 2 2的廊桥降落过 3 3 3架飞机,编号为 3 3 3的廊桥降落过 2 2 2架飞机,在这种情况下如果有 2 2 2个廊桥,那么可以停留的飞机数量就是 3 + 3 = 6 3+3=6 3+3=6;如果有 3 3 3个廊桥,可以停留的飞机数量就是 3 + 3 + 2 = 8 3+3+2=8 3+3+2=8

具体实现时,使用一个优先队列 q q q表示某家飞机的到达时间和离开时间,与部分分做法表示的含义相同,但还需要加一个所停靠廊桥的编号,因此可以使用pair<int,int>来存储。另一个优先队列 q q qq qq表示空闲的廊桥编号,初始时 n n n个廊桥都空闲,所以将 n n n个廊桥都加入优先队列 q q qq qq

#include <bits/stdc++.h>
#define A 100010
#define pi pair<int, int>using namespace std;
struct node {int a, b;friend bool operator < (const node x, const node y) {if (x.a != y.a) return x.a < y.a;else return x.b < y.b;}
}e1[A], e2[A];
int n, m1, m2, ans, f1[A], f2[A];int main(int argc, char const *argv[]) {cin >> n >> m1 >> m2;for (int i = 1; i <= m1; i++) {scanf("%d%d", &e1[i].a, &e1[i].b);}for (int i = 1; i <= m2; i++) {scanf("%d%d", &e2[i].a, &e2[i].b);}sort(e1 + 1, e1 + m1 + 1);sort(e2 + 1, e2 + m2 + 1);priority_queue<pi, vector<pi>, greater<pi> > q;priority_queue<int, vector<int>, greater<int> > qq;for (int i = 1; i <= n; i++) qq.push(i);for (int i = 1; i <= m1; i++) {while (!q.empty() and e1[i].a >= q.top().first) {qq.push(q.top().second);q.pop();}if (qq.empty()) continue;int top = qq.top();qq.pop();f1[top]++;q.push(make_pair(e1[i].b, top));}for (int i = 1; i <= n; i++) f1[i] += f1[i - 1];while (!q.empty()) q.pop();while (!qq.empty()) qq.pop();for (int i = 1; i <= n; i++) qq.push(i);for (int i = 1; i <= m2; i++) {while (!q.empty() and e2[i].a >= q.top().first) {qq.push(q.top().second);q.pop();}if (qq.empty()) continue;int top = qq.top();qq.pop();f2[top]++;q.push(make_pair(e2[i].b, top));}for (int i = 1; i <= n; i++) f2[i] += f2[i - 1];for (int i = 0; i <= n; i++)ans = max(ans, f1[i] + f2[n - i]);cout << ans << endl;
}

相关文章:

CSP-S 2021 T1廊桥分配

CSP-S 2021 T1廊桥分配 枚举分配给国内航班和国外航班的廊桥数量&#xff0c;若分配给国内机场 i i i个廊桥&#xff0c;则国外机场就有 n − i n-i n−i个廊桥&#xff0c;在此基础上分别判断两边各能通过多少飞机。用一个小根堆存储飞机离开的时间&#xff0c;枚举到一个飞机…...

项目配置说明

文章目录 一、下载 vscode 并安装相应扩展1.1 下载 vscode1.2 安装扩展 二、git 项目三、git 提交流程3.1 确定要提交的代码 四、git 拉新流程 一、下载 vscode 并安装相应扩展 1.1 下载 vscode vscode 我已经发群里了&#xff0c;或者自己去官网下载也行 1.2 安装扩展 打开…...

linux网络编程实战

前言 之前找工作的之后写了一些网络编程的笔记和代码&#xff0c;然后现在放到csdn上保存一下。有几个版本的&#xff0c;看看就好。就是简单的实现一下服务端和客户端之间的交互的&#xff0c;还没有我之前上linux编程课写的代码复杂。 哦对了&#xff0c;这个网络编程的代码对…...

网络基础 【HTTP】

&#x1f493;博主CSDN主页:麻辣韭菜&#x1f493;   ⏩专栏分类&#xff1a;Linux初窥门径⏪   &#x1f69a;代码仓库:Linux代码练习&#x1f69a; &#x1f4bb;操作环境&#xff1a; CentOS 7.6 华为云远程服务器 &#x1f339;关注我&#x1faf5;带你学习更多Linux知识…...

[Linux#61][UDP] port | netstat | udp缓冲区 | stm32

目录 0. 预备知识 1. 端口号的划分范围 2. 认识知名端口号 3. netstat 命令 4. pidof 命令 二.UDP 0.协议的学习思路 1. UDP 协议报文格式 报头与端口映射&#xff1a; 2. UDP 的特点 面向数据报&#xff1a; 3. UDP 的缓冲区 4. UDP 使用注意事项 5. 基于 UDP 的…...

定义类方法的错误总结

struct Renderer {vector<function<void(vector<string>)>> fileDropListeners;// 定义一个方法&#xff0c;它是将一个函数作为输入&#xff0c;callback是形参void print(function<void(float)> callback_func);void onFileDrop(function<void(ve…...

Redis --- 第三讲 --- 通用命令

一、get和set命令 Redis中最核心的两个命令 get 根据key来取value set 把key和value存储进去 redis是按照键值对的方式存储数据的。必须要先进入到redis客户端。 语法 set key value &#xff1a; key和value都是字符串。 对于上述这里的key value 不需要加上引号&#…...

【Linux】进程间关系与守护进程

超出能力之外的事&#xff0c; 如果永远不去做&#xff0c; 那你就永远无法进步。 --- 乌龟大师 《功夫熊猫》--- 进程间关系与守护进程 1 进程组2 会话3 控制终端4 作业控制5 守护进程 1 进程组 之前我们提到了进程的概念&#xff0c; 其实每一个进程除了有一个进程 ID(P…...

【可视化大屏】将柱状图引入到html页面中

到这里还是用的死数据&#xff0c;先将柱状图引入html页面测试一下 根据上一步echarts的使用步骤&#xff0c;引入echarts.js后需要初始化一个实例对象&#xff0c;所以新建一个index.js文件来进行创建实例化对象和配置数据信息等。 //在index.html引入<script src"j…...

gm/ID设计方法学习笔记(一)

前言&#xff1a;为什么需要gm/id &#xff08;一&#xff09;主流设计方法往往侧重于强反型区&#xff08;过驱>0.2V&#xff09;&#xff0c;低功耗设计则侧重于弱反型区&#xff08;<0&#xff09;&#xff0c;但现在缺乏对中反型区的简单和准确的手算模型。 1.对于…...

高度细化的SAGA模式实现:基于Spring Boot与RabbitMQ的跨服务事务

场景与技术栈 场景&#xff1a;电商系统中的订单创建流程&#xff0c;涉及订单服务&#xff08;Order Service&#xff09;、库存服务&#xff08;Inventory Service&#xff09;、支付服务&#xff08;Payment Service&#xff09;。 技术栈&#xff1a; Java 11 Spring Bo…...

Vue工程化开发

Vue工程化开发 一、工程化开发和脚手架 1.开发Vue的两种方式 核心包传统开发模式&#xff1a;基于html / css / js 文件&#xff0c;直接引入核心包&#xff0c;开发 Vue。工程化开发模式&#xff1a;基于构建工具&#xff08;例如&#xff1a;webpack&#xff09;的环境中开…...

Ray_Tracing_The_Next_Week下

5image Texture Mapping 图像纹理映射 我们之前虽然在交点信息新增了uv属性&#xff0c;但其实并没有使用&#xff0c;而是通过p交点笛卡尔坐标确定瓷砖纹理或者大理石噪声纹理的值 现在通过uv坐标读取图片&#xff0c;通过std_image库stbi_load&#xff08;path&#xff09;…...

ES索引生命周期管理

基于如何 定时删除ES索引过期数据 而引发的一系列关于ES索引生命周期管理ILM(Index Lifecycle Management)的学习 快速上手 &#xff1a;定时删除ES索引中的过期数据 1. ILM解决什么问题&#xff1f; ES从6.7版本引入ILM&#xff0c;通过ILM可以解决哪些问题呢? 自动新建…...

Oracle数据库体系结构基础

关于Oracle体系结构 基于Oracle11g体系结构 目标&#xff1a; 了解Oracle体系结构掌握逻辑存储结构掌握物理存储结构熟悉Oracle服务器结构熟悉常用的数据字典 Oracle数据库管理中的重要的三个概念 实例&#xff08;instance):实例是指一组Oracle后台进程以及在服务器中分配…...

QT学习笔记4.5(文件、参数文件)

QT学习笔记4.5&#xff08;文件、参数文件&#xff09; 1.保存配置参数 1.使用QSettings保存到注册表&#xff0c;ini文件 2.文件存储&#xff1a;使用 QFile 和其他类将参数保存到文本文件、二进制文件、XMLWENJIAN、JSON 文件等。 文本文件&#xff1a;以简单的键值对格式…...

服务器虚拟化的详细学习要点

服务器虚拟化的详细学习要点可以归纳为以下几个方面: 1. 基本概念与原理 定义与原理:了解服务器虚拟化是一种将物理服务器资源转化为虚拟服务器资源的技术,允许在一台物理服务器上运行多个虚拟服务器。 虚拟化层次:理解虚拟化的不同层次,如裸机虚拟化(Type 1)和托管虚…...

创建一个Java Web API项目

创建一个Java Web API涉及多个步骤和技术栈&#xff0c;包括项目设置、依赖管理、数据访问层实现、业务逻辑实现、控制层开发以及测试和部署。在这篇详解中&#xff0c;我将带领你通过一个完整的Java Web API实现流程&#xff0c;采用Spring Boot和MyBatis-Plus作为主要技术工具…...

对称加密算法的使用Java和C#

1. JAVA中的使用 1.1.原生使用 Main函数代码 import symmetric_encryption.AESExample; import symmetric_encryption.BlowfishExample; import symmetric_encryption.DESExample; import symmetric_encryption.TripleDESExample; public class App { public static…...

10款好用的开源 HarmonyOS 工具库

大家好&#xff0c;我是 V 哥&#xff0c;今天给大家分享10款好用的 HarmonyOS的工具库&#xff0c;在开发鸿蒙应用时可以用下&#xff0c;好用的工具可以简化代码&#xff0c;让你写出优雅的应用来。废话不多说&#xff0c;马上开整。 1. efTool efTool是一个功能丰富且易用…...

ubuntu22.04中备份Iptables的设置

在 Ubuntu 22.04 中备份 iptables 的设置&#xff0c;您可以采用以下几种方法&#xff1a; 使用 iptables-save 命令&#xff1a; 您可以使用 iptables-save 命令将当前的 iptables 规则保存到文件中。例如&#xff0c;要将规则保存到 /etc/iptables/rules.v4 文件中&#xff0…...

(PyTorch) 深度学习框架-介绍篇

前言 在当今科技飞速发展的时代&#xff0c;人工智能尤其是深度学习领域正以惊人的速度改变着我们的世界。从图像识别、语音处理到自然语言处理&#xff0c;深度学习技术在各个领域都取得了显著的成就&#xff0c;为解决复杂的现实问题提供了强大的工具和方法。 PyTorch 是一个…...

若依从redis中获取用户列表

因为若依放入用户的时候&#xff0c;会在减值中添加随机串&#xff0c;所以用户的key会在redis中变成&#xff1a; login_tokens:6af07052-b76d-44dd-a296-1335af03b2a6 这样的样子。 如果用 Set<Object> items redisService.redisTemplate.keys("login_tokens&…...

文件上传之%00截断(00截断)以及pikachu靶场

pikachu的文件上传和upload-lab的文件上传 目录 mime type类型 getimagesize 第12关%00截断&#xff0c; 第13关0x00截断 差不多了&#xff0c;今天先学文件上传白名单&#xff0c;在网上看了资料&#xff0c;差不多看懂了&#xff0c;但是还有几个地方需要实验一下&#…...

Chainlit集成LlamaIndex并使用通义千问实现和数据库交互的网页对话应用(text2sql)

前言 我在之前的几篇文章中写了如何使用Chainlit集成Langchain并使用通义千问实现和数据库交互的网页对话应用&#xff0c;但是发现Langchain的几种和数据库交互的组件都不够让我满意&#xff0c;虽然已经满足了大部分场景的需求&#xff0c;但是问题还是很多&#xff0c;比如…...

计组复习笔记

计组笔记 汇编部分 通用寄存器&#xff08;General Registers&#xff09;: AX (Accumulator): 用于累加运算&#xff0c;也是乘法和除法的默认寄存器。BX (Base Register): 可以用作一个基址寄存器&#xff0c;通常用于存放数据的基地址。CX (Counter Register): 通常用于循环…...

62. 环境贴图2

环境贴图作用测试 实际生活中光源照射到一个物体上&#xff0c;这个物体反射出去的光线也会影响其他的物体&#xff0c;环境贴图就是用一种简单方式&#xff0c;近似模拟一个物体周边环境对物体表面的影响。 测试&#xff1a;对于PBR材质&#xff0c;如果threejs三维场景不添…...

MATLAB中数据导入与导出的全面指南

在MATLAB中&#xff0c;数据的导入与导出是数据处理工作流中的两个基本步骤。导入是将外部数据加载到MATLAB工作区的过程&#xff0c;而导出则是将工作区中的数据保存到外部文件中。这两个步骤对于数据分析、可视化和结果共享至关重要。本文将详细介绍如何在MATLAB中进行数据的…...

Jenkins从入门到精通,构建高效自动化流程

目录 一、Jenkins简介1、Jenkins的历史与发展&#xff08;1&#xff09;Jenkins的起源&#xff08;2&#xff09;Jenkins的发展&#xff08;3&#xff09;Jenkins的社区与生态系统&#xff08;4&#xff09;Jenkins在我国的发展 2、Jenkins的核心功能3、Jenkins的应用场景 二、…...

【Android 13源码分析】Activity生命周期之onCreate,onStart,onResume-2

忽然有一天&#xff0c;我想要做一件事&#xff1a;去代码中去验证那些曾经被“灌输”的理论。                                                                                  – 服装…...