标题:油漆面积

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 stub
for (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为y2
for (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. 日期求星期(java)-蓝桥杯

    日期求星期问题(java)-蓝桥杯 1:基姆拉尔森计算公式(计算星期) 公式: int week = (d+2*m+3*(m+1)/5+y+y/4-y/100+y/400)%7; 此处y,m,d指代年 ...

  2. Java实现 蓝桥杯VIP 基础练习 高精度加法

    java算法 蓝桥杯 高精度加法 问题描述 在C/C++语言中,整型所能表示的范围一般为-231到231(大约21亿),即使long long型,一般也只能表示到-263到263.要想计算更加规模的数 ...

  3. java算法 蓝桥杯 乘法运算

    问题描述 编制一个乘法运算的程序. 从键盘读入2个100以内的正整数,进行乘法运算并以竖式输出. 输入格式 输入只有一行,是两个用空格隔开的数字,均在1~99之间(含1和99). 输出格式 输出为4行 ...

  4. java算法 蓝桥杯 扶老奶奶街

    一共有5个红领巾,编号分别为A.B.C.D.E,老奶奶被他们其中一个扶过了马路. 五个红领巾各自说话: A :我和E都没有扶老奶奶 B :老奶奶是被C和E其中一个扶过大街的 C :老奶奶是被我和D其中 ...

  5. java算法 蓝桥杯 高精度加法

    问题描述 在C/C++语言中,整型所能表示的范围一般为-231到231(大约21亿),即使long long型,一般也只能表示到-263到263.要想计算更加规模的数,就要用软件来扩展了,比如用数组或 ...

  6. java算法 蓝桥杯 格子位置

    问题描述 输入三个自然数N,i,j (1<=i<=N,1<=j<=N),输出在一个N*N格的棋盘中,与格子(i,j)同行.同列.同一对角线的所有格子的位置. 输入格式 输入共三 ...

  7. 日期类的使用(java)-蓝桥杯

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

  8. java算法 蓝桥杯 文化之旅

    问题描述 有一位使者要游历各国,他每到一个国家,都能学到一种文化,但他不愿意学习任何一种文化超过一次(即如果他学习了某种文化,则他就不能到达其他有这种文化的国家).不同的国家可能有相同的文化.不同文化 ...

  9. java算法 蓝桥杯 摆花

    问题描述 小明的花店新开张,为了吸引顾客,他想在花店的门口摆上一排花,共m盆.通过调查顾客的喜好,小明列出了顾客最喜欢的n种花,从1到n标号.为了在门口展出更多种花,规定第i种花不能超过ai盆,摆花时 ...

随机推荐

  1. Coursera课程笔记----P4E.Capstone----Week 2&3

    Building a Search Engine(week 2&3) Search Engine Architecture Web Crawling Index Building Search ...

  2. 可能会导致.NET内存泄露的8种行为

    原文连接:https://michaelscodingspot.com/ways-to-cause-memory-leaks-in-dotnet/作者 Michael Shpilt.授权翻译,转载请保 ...

  3. 简述SpringCloud框架

    1.什么是SpringCloud? SpringCloud是一系列框架的有序集合,它利用SpringBoot的开发便利性简化了分布式系统的开发,比如服务发现.服务网关.服务路由.链路追踪等.Sprin ...

  4. OpenCV开发笔记(五十五):红胖子8分钟带你深入了解Haar、LBP特征以及级联分类器识别过程(图文并茂+浅显易懂+程序源码)

    若该文为原创文章,未经允许不得转载原博主博客地址:https://blog.csdn.net/qq21497936原博主博客导航:https://blog.csdn.net/qq21497936/ar ...

  5. C++内存管理学习笔记(2)

    /****************************************************************/ /*            学习是合作和分享式的! /* Auth ...

  6. springmvc 校验---spring校验

    springmvc提供了灵活的可拓展的校验方式,根据不同的项目可选择适合的校验方式,首先介绍下springmvc中内置的校验实现方式! 1.实现 org.springframework.validat ...

  7. 网鼎杯2020青龙组writeup-web

    本文首发于Leon的Blog,如需转载请注明原创地址并联系作者 AreUSerialz 开题即送源码: <?php include("flag.php"); highligh ...

  8. axios请求拦截器(修改Data上的参数 ==>把data上的参数转为FormData)

    let instance = axios.create({ baseURL: 'http://msmtest.ishare-go.com', //请求基地址 // timeout: 3000,//请求 ...

  9. 【C#】CsvHelper 使用手册

    目录 简介 模块 读取 读取所有记录 逐条读取 读取单个字段 写入 写入所有记录 逐条写入 逐字段写入 特性 Index Name NameIndex Ignore Optional Default ...

  10. .gitignore 模式匹配

    匹配模式前使用 / 表示根目录 匹配模式后使用 / 代表是目录(不是文件) 匹配模式前加 ! 表示取反 * 代表任意个字符 ? 匹配任意一个字符 ** 匹配任意级目录