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

华为OD机试真题-矩形绘制

题目描述

实现一个简单的绘图模块,绘图模块仅支持矩形的绘制和擦除

  • 当新绘制的矩形与之前的图形重善时,对图形取并集

  • 当新擦除的矩形与之前的图形重善时,对图形取差集

给定一系列矩形的绘制和擦除操作,计算最终图形的面积。下面给出示例1和示例2的图示

示例1

在这里插入图片描述

两步绘制的矩形如左侧所示,取并集后得到的图形如右侧所示

示例2
在这里插入图片描述

第一步绘制的矩形在左侧用实线表示,第二步擦除的矩形在左侧用虚线表示,取差集后得到图像如右侧所示

输入描述

绘图模块采用二维 坐标系只,输入第一行位操作的数量 N,接下来的 N 行格式为:

  • d x1 y1 x2 y2,d表示进行绘制操作,(x1,y1)为矩形左上角坐标,(x2,y2)为矩形右下角坐标
  • e x1 y1 x2 y2,e表示进行擦除操作,(x1,y1)为矩形左上角坐标,(x2,y2)为矩形右下角坐标坐

标为整数,且数据范围为[-100,100],用例保证坐标有效

输出描述

输出最终图形的面积

示例1

输入

2
d 0 2 2 0
d -1 1 1 -1

输出

7

说明

示例2

输入

2
d 0 2 2 0
e -1 1 1 -1

输出

3

题解

把每次的矩形分解称为一个个的小方格,方格的数量即为面积的总和

源码 Java

import java.util.HashSet;

public class DrawArea {

	static Input input;
	static {
		input = new Input("2\n" +
				"d 0 2 2 0\n" +
				"d -1 1 1 -1");
		input = new Input("2\n" +
				"d 0 2 2 0\n" +
				"e -1 1 1 -1");
	}

	public static void main(String[] args) {
		Integer count = Integer.parseInt(input.nextLine());
		HashSet<String> set = new HashSet<>();
		for (int i = 0; i < count; i++) {
			String[] ss = input.nextLine().split(" ");
			String type = ss[0];
			int x1 = Integer.parseInt(ss[1]);
			int y1 = Integer.parseInt(ss[2]);
			int x2 = Integer.parseInt(ss[3]);
			int y2 = Integer.parseInt(ss[4]);
			for (int x = x1; x < x2; x++) {
				for (int y = y1; y > y2; y--) {
					String string = new StringBuilder().append(x).append(y).append(x + 1).append(y - 1).toString();
					if ("d".equals(type)) {
						set.add(string);
					}
					if ("e".equals(type)) {
						set.remove(string);
					}
				}
			}
		}
		System.out.println(set.size());
	}
}

http://www.kler.cn/a/387169.html

相关文章:

  • 网络安全-Linux基础(bash脚本)
  • DHCP与DNS安全管理
  • OLED 显示画面的变换操作——上下、左右翻转
  • 万字长文解读深度学习——卷积神经网络CNN
  • Android HandlerThread 基础
  • 原生 JavaScript基本内容和常用特性详解
  • 跨线程GCHandle,如何使用PinnedIntArray等结构来管理内存,以及如何确保在处理完成后释放资源。
  • 软件知识:什么是软件工程?
  • 【前端】Svelte:组件封装与使用
  • 校园周边美食探索及分享平台
  • C#里使用预定义函数来对数组进行翻转
  • 美格智能5G车规级通信模组: 5G+C-V2X连接汽车通信未来十年
  • [产品管理-60]:产品的情感化设计与常用工具:感性工学、情感分析、神经网络法、微软反应卡、突发情绪法
  • jmeter结合ansible分布式压测--1数据准备
  • 使用docker形式部署jumpserver
  • oracle-函数-grouping sets(x1,x2,x3...)的妙用
  • Go语言开发商城管理后台-GoFly框架商城插件已发布 需要Go开发商城的朋友可以来看看哦!
  • 【wpf】ResourceDictionary 字典资源的用法
  • 系统架构师2023版:习题
  • 七大AI知识库工具概览
  • 搜维尔科技:【煤矿虚拟仿真】煤矿企业、高校、科研单位-多语言支持、数字孪生、交互式学习体验
  • Windows10 下通过 Visual Studio2022 编译 openssl 3.4
  • go语言使用总结(持续更新)
  • 前端开发利器:npm 软链接
  • MYSQL-显示错误信息ERRORS 的语句(十七)
  • 软件项目整体实施方案,从立项到交付验收完整过程实施方案,软件实施方案(word原件)