油漆面积(2017年蓝桥杯)

ops/2024/12/25 1:40:06/

时间限制 2s 内存限制 256M

       问题描述:X星球的一批考古机器人正在一片废墟上考古。该区域的地面坚硬如石、平整如镜。管理人员为了方便,建立了标准的直角坐标系。每个机器人都各有特长、身怀绝技。它们感兴趣的内容也不相同。经过各种测量,每个机器人都会报告一个或多个矩形区域作为优先考古的区域。矩形的表示格式为(x1,y1,y1,y2)[其中1,2为下标],代表矩形的两个对角点的坐标。为了醒目,总部要求对所有机器人选中的矩形涂黄色油漆。小明并不需要当油漆工,只是他需要计算一下一共要耗费多少油漆。其实这也不难,只要计算出所有矩形覆盖的区域一共有多大面积就可以了。注意,各个矩形之间可能重叠。

     本题的输入为若干矩形,要求输出其覆盖的总面积。

    输入:输入的第一行包含一个整数n,表示有多少个矩形,n >= 1 && n < 10000。接下来的n行,每行有4个整数x1、y1、x2、y2(数字 1,2为下标),以空格分隔,表示矩形的两个对角点的坐标。 x1,y1,x2,y2(1,2为下标) >=0 && <= 10000。

    输出:输出一个整数,表示矩形覆盖的总面积。

【输入样例】

3

1   5   10   10

3   1    20   20

2   7    15    17 

【输出样例】

340

【题目解析】

       本题的题意非常简单,输入若干矩形,求它们覆盖的总面积是多少。这道题是一道中等难度题。题目难的原因是矩形数量n和顶点坐标值都很大。这道题的数学模型是“矩形面积并”,解题方案是“扫描线”,编码的正解需要用到线段树,能在紧张的赛场上做出来很难。

      如果本题用简单方法做,在n和坐标值较小的情况下可以通过30%左右的测试。

      大家容易想到一种简单方法。把平面划分成单位边长为1(面积也是1)的方格。每读入一个矩形,就把它覆盖的单位方格标注为已覆盖。对所有输入的矩形都是这样处理,统计出所有被覆盖的方格的数量,就是总面积。

    这个简单方法不需要处理矩形之间的关系,编码很简单。用vis[x][y]表示坐标(x,y)所在的方格是否被覆盖。依次读入n个矩形,累加被覆盖的方格的数量,就是答案。

【参考程序如下】

#include <iostream>
using namespace std;
bool vis[10001][10001];       //100M内存 
int main(int argc, char** argv) {int n,sum = 0;     // sum 总面积cin >> n;for(int k = 0;k < n;k++){int x1,y1,x2,y2;cin >> x1 >> y1 >> x2 >> y2;          //读一个矩形if(x1 > x2) swap(x1,x2);     //坐标排序if(y1 > y2) swap(y1,y2);      for(int i = x1; i < x2; i++)    // 检查这个矩形覆盖的方格for(int j = y1; j < y2; j++) if(!vis[i][j])    // 这个方格没有被覆盖过,需要累加面积 {sum++;vis[i][j] = 1;      // 标注为已经覆盖,后面不再累加 } } cout << sum;return 0;
}

【程序运行结果如下】


http://www.ppmy.cn/ops/144718.html

相关文章

智能文档处理百宝箱,文档处理的必备利器

1、引言 文档解析是开发者在业务实践中会频繁面临的场景&#xff0c;不管是用AI辅助日常工作&#xff0c;还是从事产品研发&#xff0c;从非结构化文本中提取文字、图片等信息具有很大的挑战。 目前市面上的文档解析工具普遍存在繁杂无序&#xff0c;缺乏统一评估标准&#xff…

MySQL InnoDB 存储引擎 Redo Log(重做日志)详解

1 Redo Log 的作用与重要性 Redo Log 是 InnoDB 存储引擎中用于实现事务持久性和崩溃恢复的关键组件。它的主要功能是记录对数据库页&#xff08;page&#xff09;所做的物理修改&#xff0c;确保即使在系统崩溃的情况下&#xff0c;已经提交的事务也不会丢失&#xff0c;并且可…

git命令恢复/还原某个文件、删除远程仓库中的文件

有时刚创建的远程仓库&#xff0c;可能无意中把一些没用的文件上传到仓库&#xff0c;本文介绍一下怎么删除这些文件。 一、git命令恢复某个文件 第一步&#xff1a;拉取最新代码 git pull 第二步&#xff1a; 查看git 修改的文件状态 git status 第三步&#xff1a;查看…

信管通低代码信息管理系统应用平台

目前&#xff0c;国家统一要求事业单位的电脑都要进行国产化替代&#xff0c;替代后使用的操作系统都是基于linux的&#xff0c;所有以前在WINDOWS下运行的系统都不能使用了&#xff0c;再者&#xff0c;各单位的软件都很零散&#xff0c;没有统一起来。需要把日常办公相关的软…

Cobalt Strike 4.8 用户指南-第十四节 Aggressor 脚本

14.1、什么是Aggressor脚本 Aggressor Script 是Cobalt Strike 3.0版及更高版本中内置的脚本语言。Aggressor 脚本允许你修改和扩展 Cobalt Strike 客户端。 历史 Aggressor Script 是 Armitage 中开源脚本引擎Cortana的精神继承者。Cortana 是通过与 DARPA 的网络快速跟踪计…

uni-app开发订单详情页面

目录 一:功能描述 二:功能实现 一:功能描述 订单详情页面包含三部分信息,分别是收货地址信息,订单商品信息和订单信息。 二:功能实现 1:收货地址信息 <view v-if="(detail.order_model == 0 || detail.order_model == 2) && (detail.address_data …

uniapp .gitignore

打开HBuilderX&#xff0c;在项目根目录下新建文件 .gitignore复制下面内容 #忽略unpackge目录下除了res目录的所有目录 unpackage/* !unpackage/res/#忽略.hbuilderx目录 .hbuilderx# 忽略node_modules目录下的所有文件 node_modules/# 忽略锁文件 package-lock.json yarn.l…

解决 Kubernetes 集群中 Calico 网络插件报错问题

文章目录 解决 Kubernetes 集群中 Calico 网络插件报错问题问题分析pod状态报错解读可能原因 解决方案重启 Calico 相关组件验证问题是否解决 进一步检查和优化检查 Calico 配置验证 RBAC 权限监控 Calico 状态定期更新和维护 总结 解决 Kubernetes 集群中 Calico 网络插件报错…