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

UVa 11776 Oh Your Royal Greediness

题目描述

在一个遥远的国家,有一位贪婪的地主,他雇佣武装监工来确保从农民那里收取税款。每个农民在一年中只有一个连续的时间段种植作物。地主需要确保在每个农民的生产期间至少有一名监工在场监督。一个监工同一时间只能监督一个农民。

地主的任务是找出最少需要多少名监工,才能确保所有农民在生产期间都受到监督。


输入格式

输入包含多个测试用例。每个测试用例以整数 NNN0≤N≤10000 \leq N \leq 10000N1000)开始,表示农民的数量。接下来的 NNN 行每行包含两个整数 SSSEEE0≤S≤E≤315360000 \leq S \leq E \leq 315360000SE31536000),分别表示农民生产区间的开始时间和结束时间(以秒为单位)。输入以 N=−1N = -1N=1 结束。


输出格式

对于每个测试用例,输出一行 Case X: Y,其中 XXX 是测试用例编号,YYY 是最少需要的监工数量。


题目分析

这个问题可以转化为:在时间轴上,有多个区间(每个农民的生产时间段),我们需要找出在任意时刻,同时进行的区间的最大数量。因为每个重叠的区间必须由不同的监工负责,所以这个最大重叠数量就是所需的最少监工数。

关键点

  • 每个区间 [S,E][S, E][S,E] 表示农民从 SSSEEE 秒(包括 SSSEEE)都在生产。
  • 如果两个区间在某个时刻重叠,那么它们需要不同的监工。
  • 如果两个区间在端点相接(例如一个区间结束于 ttt,另一个开始于 ttt),由于监工必须在整个区间内都在场,包括开始和结束时刻,所以这两个区间在 ttt 时刻仍然需要两个监工。

解题思路

我们可以使用 事件扫描法 来解决这个问题:

  1. 事件定义

    • 将每个区间的开始时间 SSS 视为一个 +1+1+1 事件(表示需要增加一个监工)。
    • 将每个区间的结束时间 EEE 视为一个 −1-11 事件(表示可以减少一个监工)。
  2. 事件排序

    • 将所有事件按时间升序排序。
    • 如果两个事件发生在同一时间,开始事件(+1+1+1 应该排在 结束事件(−1-11 之前。这是因为结束事件在 ttt 时刻之后才释放监工,而开始事件在 ttt 时刻就需要监工。
  3. 扫描计算

    • 初始化当前监工数量 count = 0 和最大监工数量 maxCount = 0
    • 遍历排序后的事件列表,对每个事件更新 count
    • 记录 count 的最大值,即为所需的最少监工数。

参考代码

// Oh Your Royal Greediness
// UVa ID: 11776
// Verdict: Accepted
// Submission Date: 2025-11-03
// UVa Run Time: 0.020s
//
// 版权所有(C)2025,邱秋。metaphysis # yeah dot net#include <bits/stdc++.h>
using namespace std;int main() {cin.tie(0), cout.tie(0), ios::sync_with_stdio(false);int N;int caseNum = 1;while (cin >> N && N != -1) {vector<pair<int, int>> events; // (time, type) type: +1 start, -1 endfor (int i = 0; i < N; i++) {int S, E;cin >> S >> E;events.push_back({S, 1});events.push_back({E, -1});}// 排序规则:时间升序,时间相同则开始事件在前sort(events.begin(), events.end(), [](const pair<int, int>& a, const pair<int, int>& b) {if (a.first != b.first) return a.first < b.first;return a.second > b.second; // +1 在前,-1 在后});int count = 0;int max_count = 0;for (auto& e : events) {count += e.second;if (count > max_count) max_count = count;}cout << "Case " << caseNum << ": " << max_count << endl;caseNum++;}return 0;
}
http://www.dtcms.com/a/565645.html

相关文章:

  • 做网站的报价方案个人备案网站盈利
  • vue项目的项目结构
  • ASP Application
  • 网站建设费无形资产示范高职院校建设专题网站
  • 软件系统可行性分析深度解析:从题目到实战答案全解析
  • 香港高防云服务器的优劣势分析(相比普通云服务器)
  • xxljob定时任务三种方式的实现
  • 咸阳机场停车省钱攻略
  • 毕设网站开发需要做什么梅州建站推荐
  • 装饰行业网站建设公司网站开发人员的的工资多少
  • 网站后台系统的易用性网站域名实名认证
  • 国产化Word处理控件Spire.Doc教程:如何使用 Java 将 TXT 文本转换为 Excel 表格
  • 结构化类型VS标称类型:TS类型系统全解析
  • Git笔记之Git下载、拉取项目、Webstorm更新Git项目报错识别不到git
  • Linux之arm SMMUv3 控制器注册过程分析(7)
  • 临沧市住房和城乡建设网站企业咨询管理公司简介
  • 13-卷积神经网络(CNN):探讨CNN在图像处理中的应用和优势
  • Spring Boot3零基础教程,StreamAPI 的基本用法,笔记99
  • seo关键词排名优化教程seo网站架构设计
  • 宿州做企业网站公司咸阳网站制作公司
  • 一个空间建多个网站的方法wordpress显示用户列表
  • Java中的数组(续)
  • 2025年内蒙古自治区职业院校技能大赛高职组 “信息安全管理与评估”竞赛样题(一)
  • 嵌入式Linux电源管理实战 --深入解析CPU调频governor原理与优化
  • PostIn零基础学习 - 如何快速设计并分享接口文档
  • 我想建立一个网站不知道怎么做啊小白怎么做网站
  • OpenLCA生命周期评估模型构建与分析
  • AR眼镜赋能船舶巡检:打造智能化运维新方案
  • 从“被动监控”到“主动预警”:EasyGBS远程视频监控方案助力企业高效安全运营
  • 《A Bilateral CFAR Algorithm for Ship Detection in SAR Images》译读笔记