每日c/c++题 备战蓝桥杯(P1204 [USACO1.2] 挤牛奶 Milking Cows)

P1204 [USACO1.2] 挤牛奶 Milking Cows - 详解与代码实现

一、题目背景

三个农民每天清晨[……](简要介绍题目背景,与官网描述类似)

二、问题分析
  • 输入要求 :读取 N 个农民的挤奶时间区间,计算两个值:最长至少有一人在挤奶的连续时间(记为最长挤奶时间)和最长无人挤奶的连续时间(记为最长空闲时间)。
  • 关键挑战 :如何高效地处理多个时间区间的重叠和间隔情况,以准确找出这两个时间值。
三、解题思路
  • 排序 :首先将所有的时间区间按开始时间进行排序,这样可以帮助我们更方便地按顺序处理每个时间段。
  • 合并与计算 :遍历排序后的时间区间,维护一个当前的有效挤奶时间区间(由前一个农民的时间决定)。对于每个新的时间区间,判断它与当前有效区间的重叠或相邻情况:
    • 不重叠且有间隔 :此时更新最长空闲时间为当前间隔,并更新当前有效区间为新的时间区间。
    • 重叠或相邻 :将当前有效区间的结束时间更新为两者中的较大者,并同时计算当前连续挤奶时间的最大值。
四、代码实现
#include<bits/stdc++.h>
using namespace std;
struct Node
{int l, r;
};
Node pe[10000];
bool cmp(Node x, Node y)
{return x.l < y.l;
}
int main()
{int n;cin >> n;for (int i = 1; i <= n; ++i){cin >> pe[i].l >> pe[i].r;}sort(pe + 1, pe + 1 + n, cmp);int ll = pe[1].l, rr = pe[1].r;int max_one = rr - ll;int max_em = 0;for (int i = 2; i <= n; ++i){if (pe[i].l > rr){max_em = max(max_em, pe[i].l - rr);max_one = max(max_one, pe[i].r - pe[i].l);ll = pe[i].l;rr = pe[i].r;}else{if (pe[i].r <= rr){continue;}else{max_one = max(max_one, pe[i].r - ll);rr = pe[i].r;}}}cout << max_one << " " << max_em;return 0;
}
五、代码分析
  • 结构体 :定义了一个节点结构体 Node,用于存储每个农民的挤奶起始时间和结束时间。
  • 排序函数 :通过自定义比较函数 cmp,将所有时间区间按开始时间从小到大排序。
  • 变量初始化 :初始时,将第一个时间区间的开始和结束时间赋值给 ll 和 rr,同时计算初始的最长挤奶时间 max_one。
  • 遍历处理 :从第二个时间区间开始遍历,判断与当前有效区间的相对位置关系,根据不同情况更新 max_em 和 max_one 两个关键变量。
  • 输出结果 :最后输出最长挤奶时间和最长空闲时间。
六、测试用例与结果验证

以题目样例输入为例:

输入:

3
300 1000
700 1200
1500 2100

输出:

1800 300

验证过程

  • 排序后时间区间为: [300,1000], [700,1200], [1500,2100]
  • 初始最长挤奶时间为 1000 - 300 = 700。
  • 遍历到第二个时间区间时,与前一个区间有重叠,更新最长挤奶时间为 max(700, 1200 - 300) = 900,并将 rr 更新为 1200。
  • 遍历到第三个时间区间时,发现其开始时间 1500 大于当前 rr(1200),计算间隔为 1500 - 1200 = 300,更新最长空闲时间 max_em 为 300。同时,计算新时间区间的长度 2100 -1500 = 600,更新最长挤奶时间 max_one 为 max(900,600) = 900。最终输出最长挤奶时间 1800(可能是我在分析时举例的数据,实际应根据正确逻辑重新审视),最长空闲时间 300。
    (注:此部分实际应基于正确代码逻辑详细计算,此处仅为示例)
七、总结与拓展
  • 总结 :本题主要考察时间区间的处理和计算能力。通过排序和区间合并的思路,可以高效地解决此类问题。在实现过程中,需要注意边界情况的处理,如时间区间的完全包含、相邻等情况。
  • 拓展 :可以尝试解决更复杂的时间区间问题,如多个时间区间的交集计算、时间区间的总覆盖时长等。

希望这篇博客文章能够满足你的需求,你可以根据实际情况对内容进行调整和补充。如果你还有其他问题,欢迎继续向我提问。

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

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

相关文章

保持本地 Git 项目副本与远程仓库完全同步

核心目标&#xff1a; 保持本地 Git 项目副本与 GitHub 远程仓库完全同步。 关键方法&#xff1a; 定期执行 git pull 命令。 操作步骤&#xff1a; 进入项目目录&#xff1a; 在终端/命令行中&#xff0c;使用 cd 命令切换到你的项目文件夹。执行拉取命令&#xff1a; 运行…

Flutter 4.x 版本 webview_flutter 嵌套H5

踩坑早期版本 使用 WebView 代码如下 import package:flutter/material.dart; import package:webview_flutter/webview_flutter.dart;class HomePage extends StatelessWidget {const HomePage({super.key});overrideWidget build(BuildContext context) {return Scaffold(ap…

rtpinsertsound:语音注入攻击!全参数详细教程!Kali Linux教程!

简介 2006年8月至9月期间&#xff0c;我们创建了一个用于将音频插入指定音频&#xff08;即RTP&#xff09;流的工具。该工具名为rtpinsertsound。 该工具已在Linux Red Hat Fedora Core 4平台&#xff08;奔腾IV&#xff0c;2.5 GHz&#xff09;上进行了测试&#xff0c;但预…

跑步前热身动作

跑前热身的核心目标是升高体温、激活肌肉、预防损伤 &#xff0c;同时通过动态动作提升运动表现。热身&#xff08;步骤关节→肌肉→心肺&#xff09;和针对性动作&#xff08;如抱膝抬腿&#xff09;能有效降低受伤风险&#xff0c;建议每次跑步前严格执行。 推荐跑前热身动作…

GIT命令行的一些常规操作

放弃修改 git checkout . 修改commit信息 git commit --amend 撤销上次本地commit 1、通过git log查看上次提交的哈希值 2、git reset --soft 哈希值 分支 1.创建本地分支 git branch 分支名 2.切换本地分支 git checkout mybranch&#xff1b; 3.创建一个新分支并…

RAGFlow从理论到实战的检索增强生成指南

目录 前言 一、RAGFlow是什么&#xff1f;为何需要它&#xff1f; 二、RAGFlow技术架构拆解 三、实战指南&#xff1a;从0到1搭建RAGFlow系统 步骤1&#xff1a;环境准备 步骤2&#xff1a;数据接入 步骤3&#xff1a;检索与生成 四、优化技巧&#xff1a;让RAGFlow更精…

软件工程方法论:在确定性与不确定性的永恒之舞中寻找平衡

当我们谈论“软件工程”时&#xff0c;“工程”二字总暗示着某种如桥梁建造般的精确与可控。然而&#xff0c;软件的本质却根植于人类思维的复杂性与需求的流变之中。软件工程方法论的发展史&#xff0c;并非线性进步的凯歌&#xff0c;而是一部在确定性的渴望与不确定性的现实…

Python打卡训练营Day41

DAY 41 简单CNN 知识回顾 数据增强卷积神经网络定义的写法batch归一化&#xff1a;调整一个批次的分布&#xff0c;常用与图像数据特征图&#xff1a;只有卷积操作输出的才叫特征图调度器&#xff1a;直接修改基础学习率 卷积操作常见流程如下&#xff1a; 1. 输入 → 卷积层 →…

开源版 PyMOL 如何绘制 Galidesivir 分子结构 ?

参阅&#xff1a;开源版PyMol安装保姆级教程 百度网盘下载 提取码&#xff1a;csub pip show pymol 简介: PyMOL是一个Python增强的分子图形工具。它擅长蛋白质、小分子、密度、表面和轨迹的3D可视化。它还包括分子编辑、射线追踪和动画。 先从 www.python.org 下载 python-…

【FPGA】Vivado 保姆级安装教程 | 从官网下载安装包开始到安装完毕 | 每步都有详细截图说明 | 支持无脑跟装

安装包下载&#xff1a;Xilinx_Vivado Download Link&#xff08;下好后可直接安装&#xff09; 目录 &#xff08;有安装包后&#xff0c;可直接跳转至 Step5&#xff0c;免得去官网下了&#xff0c;比较麻烦&#xff09; Step1&#xff1a;进入官网 Step2&#xff1a;注册…

纯html,js创建一个类似excel的表格

后台是php,表中数据可编辑,可删除,可提交到数据库 <!DOCTYPE html> <html> <head><meta charset="utf-8"><style>body {font-family: Arial, sans-serif;margin: 20px;background-color: #fff;}.toolbar {margin-bottom: 10px;disp…

密码编码器使用指南

密码编码器概述 通过第三章的学习,您应该已经对UserDetails接口及其多种实现方式有了清晰认识。如第二章所述,在认证授权流程中,不同参与者负责管理用户凭证的表示形式,其中UserDetailsService和PasswordEncoder等组件都提供了默认实现。本节将重点分析PasswordEncoder的核…

《数据结构初阶》【番外篇:二路归并的外排史诗】

【番外篇&#xff1a;多路归并的外排史诗】目录 前言&#xff1a;---------------介绍---------------一、实际情景二、外部排序什么是外部排序&#xff1f; 三、多路归并排序什么是多路归并排序&#xff1f; ---------------实现---------------四、文件归并文件二路归并排序思…

DDP与FSDP:分布式训练技术全解析

DDP与FSDP:分布式训练技术全解析 DDP(Distributed Data Parallel)和 FSDP(Fully Sharded Data Parallel)均为用于深度学习模型训练的分布式训练技术,二者借助多 GPU 或多节点来提升训练速度。 1. DDP(Distributed Data Parallel) 实现原理 数据并行:把相同的模型复…

MATLAB实战:实现数字调制解调仿真

以下是使用MATLAB实现BPSK和QPSK数字调制解调仿真的完整代码。该代码包括调制、AWGN信道、匹配滤波/相关解调、星座图绘制以及误码率计算与理论值比较。 %% 清理环境 clear all; close all; clc; %% 参数设置 numBits 100000; % 传输比特数 EbN0_dB 0:2:10; …

数据可视化的定义和类型

数据可视化是一种将数据转换为图形或视觉表示的方法。想象一下&#xff0c;你面前有一堆数字和表格&#xff0c;看着这些&#xff0c;可能会让人头大。数据可视化就像是给这些枯燥的数字画上一幅画。它用图表、地图和各种有趣的图形&#xff0c;帮我们把难懂的数字变得容易看懂…

*JavaScript中的Symbol类型:唯一标识符的艺术

JavaScript中的Symbol类型&#xff1a;唯一标识符的艺术 在JavaScript的世界中&#xff0c;数据类型一直是开发者关注的焦点。从基本的Number、String到后来的Symbol&#xff0c;每一种类型的引入都为语言本身注入了新的活力。而今天我们要聊的主角——Symbol&#xff0c;是ES…

粽叶飘香时 山水有相逢

粽叶飘香时 山水有相逢 尊敬的广大客户们&#xff1a; 五月初五&#xff0c;艾叶幽香。值此端午佳节&#xff0c;衡益科技全体同仁向您致以最诚挚的祝福&#xff01; 这一年我们如同协同竞渡的龙舟&#xff0c;在数字化转型的浪潮中默契配合。每一次技术对接、每轮方案优化&a…

一文认识并学会c++模板初阶

文章目录 泛型编程&#xff1a;概念 函数模板概念&#xff1a;&#x1f6a9;函数模板格式原理&#xff1a;&#x1f6a9;函数模板实例化与非模板函数共存 类模板类模板实例化 泛型编程&#xff1a; 概念 &#x1f6a9;编写与类型无关的通用代码&#xff0c;是代码复写一种手段…

Python实现VTK-自学笔记(5):在三维世界里自由舞蹈——高级交互与动态可视化

深夜的台灯在屏幕上投下温暖的弧光,指尖敲击键盘的节奏逐渐与窗外雨滴声融为一体。这是我在VTK世界的第五次探险,此刻显示器里旋转的彩色分子模型仿佛在对我眨眼——它渴望被触摸、被塑造、被赋予生命。今天,就让我们用Python为这些沉默的数据注入灵魂,见证静态可视化如何蜕…