寒假每日一題題解(2.17)畫圖(桶思想,bool變數標記即可)
阿新 • • 發佈:2021-02-17
畫圖(桶思想,bool變數標記即可)
在一個定義了直角座標系的紙上,畫一個 (x1,y1) 到 (x2,y2) 的矩形指將橫座標範圍從 x1 到 x2,縱座標範圍從 y1 到 y2 之間的區域塗上顏色。
下圖給出了一個畫了兩個矩形的例子。
第一個矩形是 (1,1) 到 (4,4),用綠色和紫色表示。
第二個矩形是 (2,3) 到 (6,5),用藍色和紫色表示。
圖中,一共有 15 個單位的面積被塗上顏色,其中紫色部分被塗了兩次,但在計算面積時只計算一次。
在實際的塗色過程中,所有的矩形都塗成統一的顏色,圖中顯示不同顏色僅為說明方便。
給出所有要畫的矩形,請問總共有多少個單位的面積被塗上顏色。
輸入格式
輸入的第一行包含一個整數 n,表示要畫的矩形的個數。
接下來 n 行,每行 4 個非負整數,分別表示要畫的矩形的左下角的橫座標與縱座標,以及右上角的橫座標與縱座標。
輸出格式
輸出一個整數,表示有多少個單位的面積被塗上顏色。
資料範圍
1≤n≤100,
0≤橫座標、縱座標 ≤100
輸入樣例:
2
1 1 4 4
2 3 6 5
輸出樣例:
15
題解
#include <iostream>
#include <algorithm>
using namespace std;
const int N = 10010;
int n, s[N][2], e[N][2], a, b, res;
bool pos[N][N];
int main(){
cin >> n;
for (int i = 0 ; i < n ; i ++ ) {
cin >> s[i][0] >> s[i][1] >> e[i][0] >> e[i][1];
a = max(a, e[i][0]), b = max(b, e[i][1]);
for (int j = s[i][0] ; j < e[i][0] ; j ++ ){
for (int k = s[i][1] ; k < e[i][1] ; k ++ ){
pos[j][k] = true;
}
}
}
for (int i = 0 ; i <= a ; i ++ ){
for (int j = 0 ; j <= b ; j ++ ){
if (pos[i][j]) res ++ ;
}
}
cout << res;
return 0;
}
- 桶思想,bool變數標記即可