1. 程式人生 > >ccf 201409-2 畫圖

ccf 201409-2 畫圖

問題描述

試題編號: 201409-2
試題名稱: 畫圖
時間限制: 1.0s
記憶體限制: 256.0MB
問題描述:

問題描述

  在一個定義了直角座標系的紙上,畫一個(x1,y1)到(x2,y2)的矩形指將橫座標範圍從x1到x2,縱座標範圍從y1到y2之間的區域塗上顏色。
  下圖給出了一個畫了兩個矩形的例子。第一個矩形是(1,1) 到(4, 4),用綠色和紫色表示。第二個矩形是(2, 3)到(6, 5),用藍色和紫色表示。圖中,一共有15個單位的面積被塗上顏色,其中紫色部分被塗了兩次,但在計算面積時只計算一次。在實際的塗色過程中,所有的矩形都塗成統一的顏色,圖中顯示不同顏色僅為說明方便。


  給出所有要畫的矩形,請問總共有多少個單位的面積被塗上顏色。

輸入格式

  輸入的第一行包含一個整數n,表示要畫的矩形的個數。
  接下來n行,每行4個非負整數,分別表示要畫的矩形的左下角的橫座標與縱座標,以及右上角的橫座標與縱座標。

輸出格式

  輸出一個整數,表示有多少個單位的面積被塗上顏色。

樣例輸入

2
1 1 4 4
2 3 6 5

樣例輸出

15

評測用例規模與約定

  1<=n<=100,0<=橫座標、縱座標<=100。

解題思路:

這道題主要就是方框重疊部分的問題,建立一個100*100的二維陣列來模擬畫布,如果哪個位置上在輸入的方框範圍內就將其值賦為1,最後統計二維陣列中1的個數就是面積。

程式碼:

import java.util.Scanner;

public class Main {

	public static void main(String[] args) {
		Scanner cin = new Scanner(System.in);
		int[][] canvas = new int[101][101];		//建立100*100的畫布
		
		int n = cin.nextInt();		//輸入方框個數
		
		int x1=0,y1=0;		//x1,y1 左下角座標
		int x2=0,y2=0;		//x2,y2 右上角座標
		for(int i=0;i<n;i++) {
			x1 = cin.nextInt();
			y1 = cin.nextInt();
			
			x2 = cin.nextInt();
			y2 = cin.nextInt();
			//畫布上有被方框覆蓋的賦值1
			for(int j=y1;j<y2;j++) {
				for(int k=x1;k<x2;k++) {
					canvas[j][k] = 1;
				}
			}
		}
		
		//計算canvas中等於1的個數,就是其面積
		int area = 0;
		for(int i=0;i<101;i++) {
			for(int j=0;j<101;j++) {
				if(canvas[i][j] == 1) {
					area++;
				}
			}
		}
		
		//輸出結果
		System.out.println(area);
	}

}