【CF】Day43——Codeforces Round 906 (Div. 2) E1

E1. Doremy's Drying Plan (Easy Version)

题目:

思路:

very好题,加深对扫描线的应用,值得深思

由于k = 2,那我们就可以使用简单一点的方法来写

题目可以转化为:给定n个线段,现在让你删去2条线段,使得没有与线段相交的点数最多

那么首先明确一点,就是只有下雨在 0 ~ 2 的城市才可能造成奉献,否则是不可能造成奉献的,因为这个城市起码与三个线段相交,我们只删两个是没用的

那么对于这种区间变化的题目,我们首先想到的就是差分数组+扫描线

题目的答案肯定是: 本来就是 0 的城市 + 删去 2 条线段后的新的为 0 城市

前部分好算,但是后部分就考我们的代码能力了

对于题目我们观察到 n 的数据只有 2e5,所以枚举一遍肯定是没问题的,我们可以枚举每个城市的下雨天,如果这个城市只有 day1 这天下雨,那么就代表如果删去 day1 可以直接增加这个城市的奉献,如果这个城市在 day1 day2 的交集处,那我们可以令 {day1,day2} 的奉献增加 1,因为同时删去 day1 day2 就会使得这个城市干枯,那么对于 三天以上的 我们就可以忽略不计了

具体的,我们利用差分的思想,在每个下雨的左端点和右端点加上奉献,但是由于我们要知道具体是第几天下的雨,所以这里的奉献不是 1/-1 而是 i/-i 

接下来我们和扫描线一样的操作,这里由于我们要知道具体的天数,所以我们要使用一个set,而不是int 来存储,我们利用 set 从第一个城市开始扫描,如果这个城市是某个雨天的起点,那么就将这个雨天加入set中,同时如果是终点,那么就删去,然后这个城市扫描完后开始判断

判断过程如上面所示,如果set中只有1个元素,那么就说明这个城市只在 day1 这天下过雨,也就是说这个城市之下过一次雨,那么删去 day1 就会有这个城市的奉献,所以我们用一个cnt数组来储存第 i 次雨天中只有一次下过雨的城市(即此次)的数量

如果set是空的,说明根本没下过雨,直接加到最后的答案中即可

如过set是3个及其以上,那么直接跳过即可,因为不可能有奉献

如果set是2个,那么我们就将 {day1,day2} 这个组合的奉献加 1,具体的我们可以使用一个map,其代表同时处于 {day1,day2} 这个交集中的城市数量,如果我们删除 day1 day2 那么就会增加这么多奉献了

最后就是枚举删除方法了,我们有两种删除方法,一种是删除两个不相交的区间,一个是删除相交的区间,所以要对这两种删法取最大值

第一种删法显然是删除 cnt 中最大的两个元素即可,因为 cnt 中都是只有一次的城市数,即只与一个线段相交的城市,这里不需要考虑 day1 day2 的情况,因为这些都是只有一次的,不可能相交

第二种删法就是枚举 map 中的组合,由于删除了 day1 day2,所以还需要加上只有一次的情况,即还需要加上 cnt[day1] 和 cnt[day2]

至此完毕,具体实现看代码

代码:

#include <iostream>
#include <algorithm>
#include<cstring>
#include<cctype>
#include<string>
#include <set>
#include <vector>
#include <cmath>
#include <queue>
#include <unordered_set>
#include <map>
#include <unordered_map>
#include <stack>
#include <memory>
using namespace std;
#define int long long
#define yes cout << "YES\n"
#define no cout << "NO\n"
typedef pair<int, int> PII;
void solve()
{int n, m, k;cin >> n >> m >> k;//第 i 个位置有几天是下着雨vector<vector<int>> q(n+m);vector<int> cnt(n + m,0);for (int i = 1; i <= m; i++){int l, r;cin >> l >> r;q[l].push_back(i);q[r + 1].push_back(-i);}set<int>p;int ans = 0, res = 0;map<PII, int> v;for (int i = 1; i <= n; i++){//枚举第 i 个位置是否会开始下雨,以及停雨,如果开始下雨那么就会一直持续到停雨为止(扫描线)for (auto x : q[i]){if (x > 0)p.insert(x);elsep.erase(-x);}//这个位置内之前和现在都没下雨,则必定干枯if (p.empty())ans++;//如果当前点之前只有一天下过雨,说明这天的奉献可以加一,也就是只下过一次雨,到时候删除这一天就能把这些 1 全加进奉献else if (p.size() == 1)cnt[*p.begin()]++;//下雨天的 [day1,day2] 的相交处有城市,即当前的 i 点,但是不需要知道具体是那个点,所以 +1 即可else if (p.size() == 2)v[{*p.begin(), * p.rbegin()}]++;//三天及以上的都无法改变}//考虑删除 [day1 day2] 这个线段的奉献,一次删两个,那么除了相交的城市,还要加上这两天中只下过一次雨的城市for (auto& x : v)res = max(res, x.second + cnt[x.first.first] + cnt[x.first.second]);//得到最大的两个只有一天下雨的雨天sort(cnt.begin() + 1, cnt.begin() + 1 + m, greater<int>());//删除最多的两个res = max(res, cnt[1] + cnt[2]);cout << ans + res << endl;
}signed main()
{cin.tie(0)->sync_with_stdio(false);int t = 1;cin >> t;while (t--){solve();}return 0;
}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

电子设备的“记忆大脑”:NAND、NOR、EEPROM谁在掌控你的数据?

大家好&#xff0c;我是硅言。存储芯片是电子设备的“记忆大脑”&#xff0c;未进入存储行业工作之前&#xff0c;一听到NAND、NOR、EEPROM这些专业名词就头大。本文用通俗的语言&#xff0c;带大家了解这三种常见存储芯片的核心区别和应用场景。 一、存储芯片的“门派”&#…

可视化程序设计|| 实验三:C#面向对象编程(二)

一、实验目的 1.加深理解面向对象编程的概念&#xff0c;如类、对象、实例化等。 2.熟练掌握类的封装、继承和多态机制。 3.掌握编程常用的几种排序算法。 4.理解异常的产生过程和异常处理的概念&#xff0c;掌握C#异常处理的方法。 5.能够将面向对象思想应用与编程实践&a…

STM32MPU开发之旅:从零开始构建嵌入式Linux镜像

前言 在工业4.0与边缘计算深度融合的今天&#xff0c;STM32MP257F作为意法半导体第二代工业级64位微处理器的旗舰产品&#xff0c;凭借异构计算架构、1.35 TOPS边缘AI算力和军工级安全特性&#xff0c;已成为工业自动化、机器视觉和新能源控制等领域的标杆方案。 性能跃迁的异…

大模型应用开发(PAFR)

Prompt问答 特征:利用大模型推理能力完成应用的核心功能 应用场景&#xff1a; 文本摘要分析 舆情分析 坐席检查 AI对话 AgentFunction Calling 特征&#xff1a;将应用端业务能力与AI大模型推理能力结合&#xff0c;简化复杂业务功能开发 应用场景: 旅行指南 数据…

SpringClound 微服务分布式Nacos学习笔记

一、基本概述 在实际项目中&#xff0c;选择哪种架构需要根据具体的需求、团队能力和技术栈等因素综合考虑。 单体架构&#xff08;Monolithic Architecture&#xff09; 单体架构是一种传统的软件架构风格&#xff0c;将整个应用程序构建为一个单一的、不可分割的单元。在这…

WebRTC服务器Coturn服务器用户管理和安全性

1、概述 Coturn服务器对用户管理和安全方面也做了很多的措施&#xff0c;以下会介绍到用户方面的设置 1.1、相关术语 1.1.1 realm 在 coturn 服务器中&#xff0c;域&#xff08;realm&#xff09;是一种逻辑上的分组概念&#xff0c;用于对不同的用户群体、应用或者服务进行区…

基于opencv和PaddleOCR识别身份证信息

1、安装组件 pip install --upgrade paddlepaddle paddleocr 2、完整code import cv2 import numpy as np from paddleocr import PaddleOCR# 初始化 PaddleOCR use_angle_clsTrue, lang"ch", det_db_thresh0.1, det_db_box_thresh0.5)def preprocess_image(image…

【6】GD32 高级通信外设 CAN、USBD

高级通信外设&#xff1a;CAN、USBD CAN CAN简介、主要功能与相关API回环模式收发发送特定ID的数据帧实验CAN数据帧的接收实验使用过滤器接收特定的数据帧 USBD USB通信简介USBD设备固件库架构、分层文件与库函数说明USBD模拟键盘应用USBD虚拟串口应用USBD模拟U盘应用

【LLM+Code】Windsurf Agent 模式PromptTools详细解读

一、前言 https://windsurf.com/ https://windsurf.com/blog/why-we-built-windsurf https://github.com/x1xhlol/system-prompts-and-models-of-ai-tools/tree/main/Windsurf 二、System Prompt 相比于cursor和claude code&#xff0c; windsurf的system prompt非常长&am…

安全性测试常规测试点全解析:从基础到高级的实战指南

引言 安全性测试是保障软件系统免受恶意攻击的核心环节,其目标是识别系统在设计、开发、部署过程中存在的安全漏洞。本文将围绕12大常规安全测试点展开,结合具体测试方法、示例代码及防范建议,帮助读者构建完整的安全测试体系。 一、认证与授权测试 1. 认证机制测试 测试…

OpenCV 图形API(55)颜色空间转换-----将图像从 RGB 色彩空间转换为 I420 格式函数RGB2I420()

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 将图像从 RGB 色彩空间转换为 I420 色彩空间。 该函数将输入图像从 RGB 色彩空间转换为 I420。R、G 和 B 通道值的常规范围是 0 到 255。 输出图…

Pycharm(十六)面向对象进阶

一、继承 概述&#xff1a; 实际开发中&#xff0c;我们发现很多类中的步分内容是相似的&#xff0c;或者相同的&#xff0c;每次写很麻烦&#xff0c;针对这种情况&#xff0c; 我们可以把这些相似&#xff08;相同的&#xff09;部分抽取出来&#xff0c;单独地放到1个类中&…

Codeforces Round 1020 (Div. 3)(题解ABCDEF)

A. Dr. TC 有n次翻转&#xff0c;从1到n&#xff0c;0->1,1->0&#xff0c;每次统计1的数量&#xff0c;设cnt1是字符串1的数量&#xff0c;n次就是n*cnt1&#xff0c; 但每个1都会被翻转一次减去一个cnt1,再统计cnt0&#xff0c;每个被翻转一次,答案就是(n-1)*cnt1cnt0…

HTML字符实体和转义字符串

HTML字符实体和转义字符串用于处理特殊字符&#xff0c;确保它们在不同上下文中正确显示或解析。以下是详细总结&#xff1a; HTML字符实体&#xff08;Character Entities&#xff09; ‌定义‌&#xff1a;用于在HTML中表示保留字符或不可见字符&#xff0c;避免与HTML语法…

FreeRTOS菜鸟入门(六)·移植FreeRTOS到STM32

目录 1. 获取裸机工程模版 2. 下载 FreeRTOS V9.0.0 源码 3. FreeRTOS文件夹内容简介 3.1 FreeRTOS文件夹 3.1.1 Demo文件夹 3.1.2 License 文件夹 3.1.3 Source 文件夹 3.2 FreeRTOS-Plus 文件夹 4. 往裸机工程添加 FreeRTOS 源码 5. 拷贝 FreeRTOSConfig…

通过 Tailwind CSS 自定义样式 实现深色模式切换

创建vite项目或者vue-cli配置大同小异 1、当前环境 Vue.js 3.5nuxtjs/tailwindcss 6.13.1nuxt3.15.4node18 这里主要依赖是tailwindcss 因为当前项目是使用nuxt开发。 2、配置颜色模式 在assets/css下创建main.css * {padding: 0;margin: 0;box-sizing: border-box; }[dat…

PWNOS:2.0(vulnhub靶机)

文章目录 靶机地址主机发现、端口扫描web渗透目录探测漏洞利用权限提升 解密工具地址总结 靶机地址 https://download.vulnhub.com/pwnos/pWnOS_v2.0.7z 这里如果是windows系统直接使用vmware或者virtubox打开可以使用,如果是mac系统需再去做一个配置&#xff0c;比较麻烦 这里…

Gartner魔力象限(Gartner Magic Quadrant)

Gartner魔力象限&#xff08;Gartner Magic Quadrant&#xff09;是由全球领先的研究和咨询公司Gartner发布的市场研究报告&#xff0c;广泛应用于IT行业&#xff0c;尤其是在技术供应商评估中。它以图形化的方式展示了不同技术领域中各个供应商的市场表现&#xff0c;帮助企业…

信创时代开发工具选择指南:国产替代背景下的技术生态与实践路径

&#x1f9d1; 博主简介&#xff1a;CSDN博客专家、CSDN平台优质创作者&#xff0c;高级开发工程师&#xff0c;数学专业&#xff0c;10年以上C/C, C#, Java等多种编程语言开发经验&#xff0c;拥有高级工程师证书&#xff1b;擅长C/C、C#等开发语言&#xff0c;熟悉Java常用开…

人口老龄化丨AI健康小屋如何实现防病于未然​

随着全球老龄化加剧&#xff0c;“银发浪潮” 对医疗资源、养老护理和健康管理提出了严峻挑战。 由此智绅科技应运而生&#xff0c;七彩喜智慧养老系统构筑居家养老安全网。 AI 健康小屋作为银发科技的创新载体&#xff0c;通过智能化健康监测、精准化风险预警、便捷化医疗衔…