标题:油漆面积

X星球的一批考古机器人正在一片废墟上考古。
该区域的地面坚硬如石、平整如镜。
管理人员为方便,建立了标准的直角坐标系。
每个机器人都各有特长、身怀绝技。它们感兴趣的内容也不相同。

经过各种测量,每个机器人都会报告一个或多个矩形区域,作为优先考古的区域。
矩形的表示格式为(x1,y1,x2,y2),代表矩形的两个对角点坐标。
为了醒目,总部要求对所有机器人选中的矩形区域涂黄色油漆。
小明并不需要当油漆工,只是他需要计算一下,一共要耗费多少油漆。
其实这也不难,只要算出所有矩形覆盖的区域一共有多大面积就可以了。
注意,各个矩形间可能重叠。

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

输入格式:
第一行,一个整数n,表示有多少个矩形(1<=n<10000)
接下来的n行,每行有4个整数x1 y1 x2 y2,空格分开,表示矩形的两个对角顶点坐标。
(0<= x1,y1,x2,y2 <=10000)
输出格式:
一行一个整数,表示矩形覆盖的总面积。

例如,
输入:
3
1 5 10 10
3 1 20 20
2 7 15 17

程序应该输出:
340

再例如,
输入:
3
5 2 10 6
2 7 12 10
8 1 15 15
程序应该输出:
128

import java.util.Scanner;public class youqiwenti3 {static int n, sum = 0;static int[][] p = new int[1000][10000];public static void main(String[] args) {Scanner in = new Scanner(System.in);n = in.nextInt();for (int i = 0; i < n; i++) {int x1 = in.nextInt();int y1 = in.nextInt();int x2 = in.nextInt();int y2 = in.nextInt();paint(x1, y1, x2, y2);}for (int i = 0; i < p.length; i++) {for (int j = 0; j < p[i].length; j++) {sum += p[i][j];}}System.out.println(sum);}private static void paint(int x1, int y1, int x2, int y2) {// TODO Auto-generated method stubfor (int i = x1; i < x2; i++) {for (int j = y1; j < y2; j++) {p[i][j] = 1;}}}}

其实还可以用io包来优化,上面的也可以过测试用例,下面这个在io输入上进行了优化

import java.io.BufferedReader;
import java.io.InputStreamReader;public class youqiwenti {public static void main(String[] args) throws Exception {BufferedReader br = new BufferedReader(new InputStreamReader(System.in));int n = Integer.parseInt(br.readLine());// 储存每个矩形的坐标int[][] shape = new int[n][4];for (int i = 0; i < n; i++) {String[] nums = br.readLine().split(" +");//下标0为x1,1为y1,2为x2,3为y2for (int j = 0; j < 4; j++) {shape[i][j] = Integer.parseInt(nums[j]);}}br.close();// 求出矩形中最大的x和y坐标值int maxX = 0;int maxY = 0;for (int i = 0; i < n; i++) {if (shape[i][0] > maxX) {maxX = shape[i][0];}if (shape[i][2] > maxX) {maxX = shape[i][2];}if (shape[i][1] > maxY) {maxY = shape[i][1];}if (shape[i][3] > maxY) {maxY = shape[i][3];}}// 创建一个数组表示所有区域,同时也是为了记录是否访问过boolean[][] visited = new boolean[maxX + 1][maxY + 1];//依次把矩形放入所有区域for (int i = 0; i < n; i++) {place(i, shape, visited);}int area = 0;//遍历所有区域,计算面积for (int i = 0; i < visited.length; i++) {for (int j = 0; j < visited[i].length; j++) {if (visited[i][j]) {area++;}}}System.out.println(area);}/*** 将矩形点放入所有区域中* * @param i* @param shape* @param visited*/private static void place(int i, int[][] shape, boolean[][] visited) {// 确保x1,y1分别比x2,y2小if (shape[i][0] > shape[i][2]) {int temp1 = shape[i][0];shape[i][0] = shape[i][2];shape[i][2] = temp1;}if (shape[i][1] > shape[i][3]) {int temp2 = shape[i][1];shape[i][1] = shape[i][3];shape[i][3] = temp2;}for (int x = shape[i][0]; x < shape[i][2]; x++) {for (int y = shape[i][1]; y < shape[i][3]; y++) {
//              if (!visited[x][y]) {//这里没有必要做判断,做了判断消耗的时间反而更多visited[x][y] = true;
//              }}}}}

Java实现 蓝桥杯油漆问题相关推荐

  1. 蓝桥杯陶陶摘苹果C语言,Java实现 蓝桥杯VIP 算法提高 陶陶摘苹果2

    算法提高 陶陶摘苹果2 时间限制:1.0s 内存限制:256.0MB 问题描述 陶陶家的院子里有一棵苹果树,每到秋天树上就会结出n个苹果.苹果成熟的时候,陶陶就会跑去摘苹果.陶陶有个30厘米高的板凳, ...

  2. 蓝桥杯试题 基础练习 BASIC-11 十六进制转十进制 JAVA——冲刺蓝桥杯第六天

    目录 前言 试题 基础练习 十六进制转十进制 要点 思路一:常规做法--进制转换 字符 循环 本题代码 思路二:简单做法,使用java自带的方法 本题代码 前言 进制转化包括这篇我写了三篇了,这篇没讲 ...

  3. 蓝桥杯 油漆面积【第八届】【省赛】【A组】线段树扫面线/求矩形相交面积/模拟

    资源限制 内存限制:256.0MB   C/C++时间限制:1.0s   Java时间限制:3.0s   Python时间限制:5.0s X星球的一批考古机器人正在一片废墟上考古. 该区域的地面坚硬如 ...

  4. 蓝桥杯日期计算java_日期类的使用(java)-蓝桥杯

    蓝桥杯日期问题常考,java提供了日期类很方便: //日历类 Calendar c = Calendar.getInstance(); // 获取实例化对象 Date date =c.getTime( ...

  5. java:蓝桥杯练习 分解质因数

    [蓝桥杯][基础练习VIP]分解质因数 时间限制: 1Sec 内存限制: 128MB 提交: 2802 解决: 1688 题目描述 求出区间[a,b]中所有整数的质因数分解. 提示 先筛出所有素数,然 ...

  6. 标题 日期问题java蓝桥杯,日期类的使用(java)-蓝桥杯

    蓝桥杯日期问题常考,java提供了日期类很方便: //日历类 Calendar c = Calendar.getInstance(); // 获取实例化对象 Date date =c.getTime( ...

  7. Java实现 蓝桥杯VIP 基础练习 分解质因数

    题目介绍 问题描述 求出区间[a,b]中所有整数的质因数分解. 输入格式 输入两个整数a,b. 输出格式 每行输出一个数的分解,形如k=a1a2a3-(a1<=a2<=a3-,k也是从小到 ...

  8. Java实现蓝桥杯 算法训练 ALGO-15 旅行家的预算

    问题描述 一个旅行家想驾驶汽车以最少的费用从一个城市到另一个城市(假设出发时油箱是空的).给定两个城市之间的距离D1.汽车油箱的容量C(以升为单位).每升汽油能行驶的距离D2.出发点每升汽油价格P和沿 ...

  9. Java实现 蓝桥杯VIP 算法训练 JAM计数法

    题目描述 Jam是个喜欢标新立异的科学怪人.他不使用阿拉伯数字计数,而是使用小 写英文字母计数,他觉得这样做,会使世界更加丰富多彩.在他的计数法中,每个数字的位数都是相同的(使用相同个数的字母),英文 ...

最新文章

  1. Arista将Spine-Leaf路由/交换产品进行芯片升级
  2. Java实现单例模式
  3. 基于Xml 的IOC 容器-分配路径处理策略
  4. ubuntu11.10 64bits机器安装flash方法
  5. jdk 8 时区 转换_JDK 8 BigInteger精确缩小转换方法
  6. 先装vs还是先装sql_锅炉给水泵的止回阀到底安装在出口阀前还是阀后?
  7. python-词云wordcloud-0223
  8. arm-arago-linux-gnueabi 下载,arm-arago-linux-gnueabi问题
  9. win10如何关闭F1~F12快捷键?
  10. 178.16. cvs release
  11. 编程珠玑 第一部分 基础
  12. 潇洒郎: websockets 服务端设计:多线程执行async方法
  13. leetcode刷题_day14_(str,hashmap)_code3(最长非重子串)
  14. Gearman中文手册技术文档分享chm
  15. 基于NV040D-S8语音芯片在智能水杯/保温杯的方案设计
  16. 小程序开发工具绑定服务器,微信小程序绑定到第三方平台流程
  17. LaTeX 向量两种表示方法(加粗、箭头)示例
  18. 双软企业认定(软件产品/软件企业认定)
  19. Word中截取部分内容并保存为jpg图片的方法
  20. mysql查询手机号码后四位,前几位怎么写?

热门文章

  1. 最常见的8种网络安全攻击类型!
  2. 超过100项改进 100tv聚好看全新发布
  3. NFS nfs4_reclaim_open_state lock reclaim failed
  4. ZeroLogon(CVE-2020-1472) 漏洞的攻击与防御策略(上)
  5. 自己编写一个读取TGA文件的类
  6. android textview 文字居中无效,android – 不能垂直居中textview的文本
  7. 为什么C++被公认为是最难的语言?
  8. 水果店怎样开业吸引人流量,水果店怎样开业吸引人
  9. 程序设计思维与实践 Month3 模拟
  10. Ice Lake CPU RESET流程