java P2692 覆盖

题目背景
WSR的学校有B个男生和G个女生都来到一个巨大的操场上扫地。

题目描述
操场可以看成是N 行M 列的方格矩阵,如下图(1)是一个4 行5 列的方格矩阵。每个男生负责打扫一些连续的行,每个女生负责打扫一些连续的列。比如有两个男生,第一个男生负责第1、2 两行、第二个男生负责第4 行,如图(2)的蓝色。打扫的区域可能重复,比如,又有两个女生,第一个女生负责打扫第3、4 两列,第二个女生负责打扫第4、5 两列,如图(3)的红色。从图(3)可以容易看出,有颜色覆盖的方格数为18,即这4 名学生总共打扫了18 个方格。

在这里插入图片描述

老师要WSR在学校给出打扫安排的数据后快速计算出这些学生总共打扫了多少方格?

输入格式
第一行4 个正整数:N,M,B,G,N 表示方阵行数,M 表示方阵列数,B 表示男生数,G 表示女生数。

接下来B 行,每行两个整数x y。表示相应某个男生负责打扫从第x 行到第y行(共y-x+1 行),保证1≤x≤y≤N。

再接下来G 行,每行两个整数x y。表示相应某个女生负责打扫从第x 列到第y 列(共y-x+1 列),保证1≤x≤y≤M。

输出格式
一个整数,表示所打扫的面积。(即格子的总数)

输入输出样例

输入 #1

4 5 2 2
1 2
4 4
3 4
4 5

输出 #1

18

import java.util.*;

public class Main {

	int n = 0, m = 0, c = 0, d = 0;
	int x = 0, y = 0, t = 0, s =0;
	
	public static void main(String[] args) {
		new Main().sf();
	}

	public void sf() {
		Scanner in = new Scanner(System.in);		
		
		n = in.nextInt();
		m = in.nextInt();
		c = in.nextInt();
		d = in.nextInt();
		

		bb[0] = 1;
		b[0] = 1;
		for (int i = 1; i <= c; i++) {
			x = in.nextInt();
			y = in.nextInt();
			for (int j = x; j <= y; j++) {
				b[j] = 1;
			}
		}
		for (int i = 1; i <= n; i++) {
			if (b[i] == 0) {
				s++;
			}
		}
		
		for (int i = 1; i <= d; i++) {
			x = in.nextInt();
			y = in.nextInt();
			for (int j = x; j <= y; j++) {
				bb[j] = 1;
			}
		}
		for (int i = 1; i <= m; i++) {
			if (bb[i] == 0) {
				t++;
			}
		}
		System.out.println(n*m-t*s);
	}
}

发布了88 篇原创文章 · 获赞 27 · 访问量 5万+

猜你喜欢

转载自blog.csdn.net/qq_43457125/article/details/104537537
今日推荐