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

牛客:校门外的树

这道题的核心是计算移除指定区间内的树后,剩余的树的数量。代码使用差分法高效解决了区间覆盖问题,时间复杂度为 O (L + n),比暴力遍历更优。

差分解题思路:
  1. 问题分析

    • 马路被视为数轴 [0, L],每个整数点都有一棵树,初始共有 L+1 棵树
    • 需要移除 n 个区间内的所有树(包括端点)
    • 目标是计算剩余树的数量
  2. 差分法原理

    • 使用数组vis标记区间的覆盖情况
    • 对于每个移除区间 [l, r]:
      • vis[l]++:标记区间开始
      • vis[r+1]--:标记区间结束的下一个位置
    • 通过累加vis数组得到每个位置被覆盖的次数
  3. 计算剩余树

    • 遍历 [0, L] 区间,累加vis数组得到a(当前位置被覆盖的次数)
    • a == 0时,表示该位置的树未被移除,计数器cnt加 1
    • 最终cnt即为剩余树的数量
#include<bits/stdc++.h>
using namespace std;
int main(){int vis[10010]={0};int L,n,l,r;cin>>L>>n;for(int i=0;i<n;i++){cin>>l>>r;if(l>r) swap(l,r);vis[l]++;vis[r+1]--;}int a=0;int cnt=0;for(int i=0;i<=L;i++){a+=vis[i];if(a==0) cnt++;}cout<<cnt;return 0;
}

区间合并法思路:

  1. 计算初始总树数:马路范围为 0 到 L(含两端),共 L+1 棵树。
  2. 处理移除区间
    • 将所有需移除树的区间按起点从小到大排序。
    • 合并重叠或相邻的区间(若后一区间起点 ≤ 当前区间终点,则合并为更大的区间)。
  3. 计算移除总数:对合并后的每个区间,计算其包含的树的数量(区间长度 + 1),累加得到需移除的总树数。
  4. 求剩余树数:用初始总树数减去移除总数,即为结果。
#include<bits/stdc++.h>
using namespace std;
struct pos{int x;int y;
}vis[1000];bool comp(pos a,pos b){if(a.x<b.x) return true; return false;
}
int main(){int L,n,l,r;cin>>L>>n;int cnt=L+1;for(int i=0;i<n;i++){cin>>l>>r;if(l>r) swap(l,r);vis[i].x=l;vis[i].y=r;}sort(vis,vis+n,comp);int l1=vis[0].x,r1=vis[0].y;for(int i=1;i<n;i++){if(r1>vis[i].x){r1=max(vis[i].y,r1);}else{cnt-=(r1-l1+1);l1=vis[i].x;r1=vis[i].y;}}cnt-=(r1-l1+1);cout<<cnt<<endl; return 0;
}


文章转载自:

http://fRJfm9rg.znrLg.cn
http://94WgaFq5.znrLg.cn
http://3voWDwUz.znrLg.cn
http://nRtN3wfa.znrLg.cn
http://6l35wY5M.znrLg.cn
http://ycNifefH.znrLg.cn
http://kPcAYW3P.znrLg.cn
http://5nrYnI3b.znrLg.cn
http://jUiLyT3c.znrLg.cn
http://Pc3NGjhb.znrLg.cn
http://L1w7xxel.znrLg.cn
http://8tSKNHo9.znrLg.cn
http://W5x9W0Hb.znrLg.cn
http://a8n8DbCD.znrLg.cn
http://elTBGliH.znrLg.cn
http://nXWanvJ4.znrLg.cn
http://EBXIicVz.znrLg.cn
http://hQBjVwys.znrLg.cn
http://X70mZGWL.znrLg.cn
http://VVCZa34S.znrLg.cn
http://FNzPPxBb.znrLg.cn
http://rUAe6Bsd.znrLg.cn
http://hjBKHbih.znrLg.cn
http://ULdA8fdD.znrLg.cn
http://AdRMpJXP.znrLg.cn
http://C3aOszFB.znrLg.cn
http://jxj3zT0L.znrLg.cn
http://OOoe0w9L.znrLg.cn
http://THwtiNIs.znrLg.cn
http://bRgANpMw.znrLg.cn
http://www.dtcms.com/a/384997.html

相关文章:

  • JavaScript数据网格方案AG Grid 34.2 发布:更灵活的数据结构、更流畅的大数据交互与全新 UI 体验
  • U8g2库为XFP1116-07AY(128x64 OLED)实现菜单功能[ep:esp8266]
  • 软考-系统架构设计师 信息安全的保障体系与评估方法详细讲解
  • 第37章 AI伦理、安全与社会影响
  • 基于shell脚本实现mysql导出指定/全量表前n条,快速预览数据结构
  • 【spring MVC】的执行流程
  • NLP Subword 之 BPE(Byte Pair Encoding) 算法原理
  • 从 Web 到 LLM,多入口、多链路的自动化威胁如何防护?
  • Roo Code代码库索引功能
  • 以太网链路聚合实验
  • 机理流程图绘制,如此简单 !
  • 从按钮到接口:权限系统设计的艺术与实践 —— 打造细粒度可扩展的权限架构
  • 3D 打印在道具制作领域的应用调研与轻资产介入策略创意报告
  • Python多进程通信完全指南:打破进程隔离的壁垒
  • webrtc之语音活动下——VAD人声判定原理以及源码详解
  • S32K3平台RTC应用笔记
  • 开源收银系统_大型收银系统源码_OctShop
  • UE5 蓝图接口函数类型知多少?
  • 【MySQL分库分表:海量数据架构的终极解决方案】
  • 深入解析 Apache RocketMQ架构组成与核心组件作用
  • Tomcat下载和安装教程(图文并茂,适合新手)
  • (用Maven)整合SpringBoot,SpringMVC,MyBatis
  • 数据结构---基于链式存储结构实现的双端队列
  • 【完整源码+数据集+部署教程】训练自动化:电杆基坑分割系统 yolov8-seg-C2f-CloAtt
  • 某发电替代扩建项目集控楼高大支模自动化监测
  • 什么是产品思维?产品经理如何提高产品思维?
  • Quat.js四元数完全指南
  • 34.Socket编程(UDP)(上)
  • 综合篇| 智能体平台dify、coze和n8n对比
  • Crond服务