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

题解:洛谷 P1884 [USACO12FEB] Overplanting S

【题目来源】

洛谷:[P1884 USACO12FEB] Overplanting S - 洛谷

【题目描述】

在一个笛卡尔平面坐标系里(则 \(X\) 轴向右是正方向,\(Y\) 轴向上是正方向),有 \(N(1\le N\le 1000)\) 个矩形,第 \(i\) 个矩形的左上角坐标是 \((x_1,y_1)\),右下角坐标是 \((x_2,y_2)\)。问这 \(N\) 个矩形所覆盖的面积是多少?

注意:被重复覆盖的区域的面积只算一次。

【输入】

第一行,一个整数 \(N(1\le N\le 1000)\)

接下来有 \(N\) 行,每行描述一个矩形的信息,分别是矩形的 \(x_1,y_1,x_2,y_2(-10^8\le x_1,y_1,x_2,y_2,\le 10^8)\)

【输出】

一个整数,被 \(N\) 个矩形覆盖的区域的面积。

【输入样例】

2
0 5 4 1
2 4 6 2

【输出样例】

20

【解题思路】

image

【算法标签】

《洛谷 P1884 Overplanting》 #离散化# #USACO# #2012#

【代码详解】

#include <bits/stdc++.h>
using namespace std;#define int long long  // 定义int为long long类型// 矩形结构体,存储对角线坐标
struct Node 
{int x1, y1, x2, y2;
} rect[1005];  // 存储所有矩形int n, a[2005], b[2005], ans;  // n: 矩形数量,a/b: 坐标离散化数组,ans: 面积结果
bool c[2005][2005];  // 标记矩阵,记录每个小格子是否被覆盖signed main()
{// 输入矩形数量cin >> n;// 输入每个矩形的坐标并存入离散化数组for (int i = 0; i < n; i++) {// 注意输入顺序是y1,x2,y2,x1cin >> rect[i].y1 >> rect[i].x2 >> rect[i].y2 >> rect[i].x1;a[i * 2] = rect[i].x1;a[i * 2 + 1] = rect[i].x2;b[i * 2] = rect[i].y1;b[i * 2 + 1] = rect[i].y2;}// 对x坐标进行离散化sort(a, a + 2 * n);int lena = unique(a, a + 2 * n) - a;  // 去重后的x坐标数量// 对y坐标进行离散化sort(b, b + 2 * n);int lenb = unique(b, b + 2 * n) - b;  // 去重后的y坐标数量// 将矩形坐标映射到离散化后的索引for (int i = 0; i < n; i++) {rect[i].x1 = lower_bound(a, a + lena, rect[i].x1) - a;rect[i].x2 = lower_bound(a, a + lena, rect[i].x2) - a;rect[i].y1 = lower_bound(b, b + lenb, rect[i].y1) - b;rect[i].y2 = lower_bound(b, b + lenb, rect[i].y2) - b;// 标记被当前矩形覆盖的小格子for (int j = rect[i].x1; j < rect[i].x2; j++) {for (int k = rect[i].y1; k < rect[i].y2; k++) {c[j][k] = 1;}}}// 计算总面积for (int i = 0; i < lena - 1; i++) {for (int j = 0; j < lenb - 1; j++) {if (c[i][j]) {// 累加每个被覆盖小格子的实际面积ans += (a[i + 1] - a[i]) * (b[j + 1] - b[j]);}}}// 输出结果cout << ans;return 0;
}

【运行结果】

2
0 5 4 1
2 4 6 2
20
http://www.jsqmd.com/news/392498/

相关文章:

  • 锁相环电路(PLL) 工艺:smic13mmrf_1233 工作电压:3.3V 电路结构
  • 智慧校园服务承诺:让响应更快,让解决更高效
  • 7项高效AI辅助改写工具测评结果,帮助用户精准优化论文内容。
  • 题解:洛谷 P1083 [NOIP 2012 提高组] 借教室
  • 题解:洛谷 P3406 海底高铁
  • 深度解析7大智能降重工具核心功能,有效解决论文重复率过高问题。
  • 详细对比7款智能降重软件性能差异,找到最适合论文优化的工具。
  • 专业评测7种AI论文降重工具优缺点,大幅降低重复率提升原创性。
  • 基于7种主流AI降重工具的横向测评数据,优化论文内容通过率更高。
  • CSS3发光粒子背景动画特效实战设计 - 指南
  • 通过7款高效AI降重工具的深度测评分析,显著提升学术论文的查重通过率
  • mvn clean install -U
  • 禁律、本体与模型:AI元人文底层逻辑的闭环建构 ——兼论《意义的界面》对认知边界的越界性触碰
  • 实测7大人工智能降重软件效果对比,帮助论文轻松达到合格标准
  • 想高薪!0基础怎么转行做AI,收藏这篇文章就够了
  • 针对7类AI降重技术的实际效果分析,确保论文顺利通过系统检测。
  • 模型压缩新思路:Engram条件记忆模块,小白也能看懂的记忆扩展魔法(收藏版)
  • 小白程序员必看:AI大模型如何开启你的2026生产力革命?
  • ARM标准汇编(armasm)中的“定义”(Assembler Directive)
  • 这是一篇写给想入行AI大模型新手的建议和分享,小白程序员转型指南,收藏这份进阶路线!
  • 【Python】学生管理系统
  • AgentCPM大模型智能体开源:本地部署长程深度搜索,小白也能轻松搭建私有化AI助手(收藏必备)
  • 优选算法——前缀和(7):连续数组
  • 宝塔面板 在云服务器部署前后端分离web项目Tomcat+SpringBoot+mysql(0基础全程点点点) - 教程
  • 零基础也能入行!AI大模型训练师:高薪风口职业,普通人转行新机遇!
  • AI应用架构师手记:智能虚拟资产交易系统数据库架构选型与优化
  • 小白程序员必收藏!AI大模型自学路线图,助你轻松入门并实践_自学AI大模型学习路线推荐
  • 云南大学计算机考研复试【经验分享】
  • Transformer解码器深度解析:小白也能轻松掌握大模型核心技术(收藏备用)
  • 5分钟搞懂AI Agent技能机制:让AI像工具箱一样灵活完成任务,速收藏!