区间和并-

news/2024/12/18 23:06:53/

题目一:1399: 校门外的树

P1399 - 校门外的树 - HAUEOJ

代码

#include<bits/stdc++.h>
using namespace std;using PII = pair<int,int>;
const int N = 1e5+10;
vector<PII>a, b;int main() {int n, m;cin >> n >> m;while(m --) {int l, r;cin >> l >> r;a.push_back({l,r});}sort(a.begin(),a.end()); int cnt = n + 1;int l = -1, r = -1;for(int i = 0; i < a.size(); i ++) {if(a[i].first>r) {if(l!=-1 && r!=-1) b.push_back({l,r});l = a[i].first;r = a[i].second;}r = max(r,a[i].second);}b.push_back({l,r}); // 把最后一个区间放进去 for(auto x : b) {cnt -= x.second-x.first+1;}cout << cnt << endl;return 0;
}

题目二:1343. 挤牛奶

1343. 挤牛奶 - AcWing题库

代码 

不要忘了sort 左端点,还有处理边界细节,开始0到最前面的左端点不算最长无人持续时间。

#include<bits/stdc++.h>
using namespace std;int n;
using PII = pair<int,int>;
const int N = 1e4+10;
vector<PII> a, b;int main() {cin >> n;while(n --) {int l, r;cin >> l >> r;a.push_back({l,r});}sort(a.begin(),a.end()); // 不要忘了排序左端点int l=-1, r=-1;int maxnotime = 0, maxtime = 0;for(int i = 0; i < a.size(); i ++) {if(a[i].first>r) {//maxnotime = max(maxnotime, a[i].first-r);if(l!=-1) {b.push_back({l,r});maxnotime = max(maxnotime, a[i].first-r);}l = a[i].first;r = a[i].second;}r = max(r,a[i].second);}b.push_back({l,r});for(auto x : b) {maxtime = max(maxtime,x.second-x.first);}cout << maxtime << " " << maxnotime << endl;return 0;
}

题目三:1400: 现在是摸鱼时间2.0

P1400 - 现在是摸鱼时间2.0 - HAUEOJ

 

代码 

主要是边界上的考虑。

string 存储端点。PII 存区间

开头st==00:00:00 到第一个区间左端点,第一个需要考虑的边界

末尾st=?max(st,a[i].second) i == a.size()-1, 第二个需要考虑的边界,是否到一天结束

max(st,a[i].second) 是因为要取最右边的,你不知道当前区间右端点是否都比前面的右端点都大,因为排序的是左端点。

#include<bits/stdc++.h>
using namespace std;// 区间和并,合并重叠的时间
// 除去区间内的区域都摸鱼using PSS = pair<string,string>;
int n;
vector<PSS> a;int main() {cin >> n;while(n --) {// string 存储区间端点 string s1, s, s2;cin >> s1 >> s >> s2;a.push_back({s1,s2});}// 排序左端点sort(a.begin(),a.end());// 边界变量定义 string st = "00:00:00";int flag = 1; for(int i = 0; i < a.size(); i ++) {//开头边界处理 if(st=="00:00:00" && a[i].first!="00:00:00") {cout << st << " - " << a[i].first << endl;st = a[i].second; flag = 0;continue;}if(a[i].first<=st) {st = max(st,a[i].second);}else if(a[i].first>st) {cout << st << " - " << a[i].first << endl;st = a[i].second; flag = 0;}// 末尾边界处理 if(i == a.size()-1 && st<"23:59:59") {flag = 0;cout << st << " - " << "23:59:59" << endl;}}if(flag) puts("来世还作程序员!");return 0;
} 


http://www.ppmy.cn/news/1556226.html

相关文章

神州数码DCME-320 online_list.php 任意文件读取漏洞复现

0x01 产品描述: ‌神州数码DCME-320是一款高性能多业务路由器,专为多用户、多流量和多业务种类需求设计‌。它采用了

#GC4049. GC.2017---. GC.2016.六年级

这套题包含了历年真题&#xff0c;包含了前面我写的博客中的题目&#xff0c;十分重要&#xff01;&#xff01;&#xff01;&#xff01;要考试的同学可以参考一下&#xff01;&#xff01; 此套题限时3小时。 #GC4049. GC.2017.六年级.01.更多闰年 题目描述 在 smoj 网站上…

10 JVM内置锁

我们先想明白一个问题&#xff0c;什么是锁&#xff1f; 我们去给自己家锁门的时候&#xff0c;只有对应的一把钥匙能开锁。当用钥匙去开锁的时候&#xff0c;锁孔的内置型号会验证钥匙能不能对的上。能对上就能把锁打开&#xff0c;然后进到家里使用家里的资源。否则就在外面等…

Python 写的《桌面时钟》屏保

原代码&#xff1a; # 日历式时钟 # 导入所需的库 # 作者&#xff1a;Hoye # 日期&#xff1a;2024年12月16日 # 功能&#xff1a;显示当前日期、星期、时间&#xff0c;并显示模拟时钟 import tkinter as tk from tkinter import ttk import time import math import sysdef …

ASP.NET Core+EF Core+Vue.js/Ant Design/Axios 实现简单的图书查询

实现步骤 : 1、创建一个空白的项目 2、创建一个.NET Core 项目&#xff0c;选择API&#xff0c;记得把https勾选去掉 ①、 然后导入EF Core相关包,点右键选择NuGet包管理&#xff0c;找到一下几个下载即可 Microsoft.EntityFrameworkCore.SqlServer&#xff1a;Sql Server数据…

深度学习之Autoencoders GANs for Anomaly Detection 视频异常检测

在视频异常检测(Video Anomaly Detection)任务中,Autoencoders(自编码器) 和 GANs(生成对抗网络) 是常用的深度学习模型,它们在检测视频中的异常事件(如入侵、破坏、非法行为等)方面发挥着重要作用。通过分析视频帧的时空特征,这些模型能够识别出与正常行为模式不同…

Centos gcc 12.3 安装

参考博文1:Centos系统升级gcc_centos6升级gcc-CSDN博客 参考博文2:centos7升级gcc9之代码笔记_centos7 gcc9-CSDN博客 CentOS系统通常自带的软件包管理器(如YUM)不会包含最新版本的GCC,要安装GCC 12.3,你需要使用CentOS的第三方仓库,或者从源代码编译。 如果选择从源…

Flutter:页面中触发点击事件,通过id更新特定视图

当页面触发某些事件后&#xff0c;我不想整个视图都更新&#xff0c;而是通过id去更新特定的一块内容 controller class StartController extends GetxController {StartController();String title "";void onTap(int ticket) {title "GetBuilder -> 点击了…