蓝桥杯——算法训练——画图
一道小模拟
——————————————————————————————————————
资源限制
时间限制:
1.0
s
1.0s
1.0s 内存限制:
256.0
M
B
256.0MB
256.0MB
问题描述
在一个定义了直角坐标系的纸上,画一个
(
x
1
,
y
1
)
(x1,y1)
(x1,y1) 到
(
x
2
,
y
2
)
(x2,y2)
(x2,y2) 的矩形指将横坐标范围从
x
1
x1
x1 到
x
2
x2
x2,纵坐标范围从
y
1
y1
y1 到
y
2
y2
y2 之间的区域涂上颜色。
下图给出了一个画了两个矩形的例子。第一个矩形是
(
1
,
1
)
(1,1)
(1,1) 到
(
4
,
4
)
(4, 4)
(4,4),用绿色和紫色表示。第二个矩形是
(
2
,
3
)
(2, 3)
(2,3) 到
(
6
,
5
)
(6, 5)
(6,5),用蓝色和紫色表示。图中,一共有
15
15
15 个单位的面积被涂上颜色,其中紫色部分被涂了两次,但在计算面积时只计算一次。在实际的涂色过程中,所有的矩形都涂成统一的颜色,图中显示不同颜色仅为说明方便。
给出所有要画的矩形,请问总共有多少个单位的面积被涂上颜色。
输入格式
输入的第一行包含一个整数
n
n
n,表示要画的矩形的个数。
接下来
n
n
n 行,每行
4
4
4 个非负整数,分别表示要画的矩形的左下角的横坐标与纵坐标,以及右上角的横坐标与纵坐标。
输出格式
输出一个整数,表示有多少个单位的面积被涂上颜色。
样例输入
2
2
2
1
1
4
4
2
3
6
5
\begin{matrix}1&1&4&4\\\\2&3&6&5\end{matrix}
12134645
样例输出
15
15
15
数据规模与约定
1
⩽
n
⩽
100
1\leqslant n\leqslant100
1⩽n⩽100,
0
⩽
0\leqslant
0⩽ 横坐标、纵坐标
⩽
100
\leqslant100
⩽100。
——————————————————————————————————————
思路分析:这道题本质上就是一个小模拟,可以直接设置一个二维数组模拟坐标系,然后根据题目要求更新数组的值,大于
0
0
0 就代表这一格被涂上了颜色,最后遍历数组,返回被涂色的格子数即可。
#include <iostream>
#include <string.h>
#include <string>
using namespace std;
int map[105][105];
int main(){
int n;
while(cin>>n){
memset(map, 0, sizeof(map));
while(n--){
int x1, y1, x2, y2;
cin>>x1>>y1>>x2>>y2;
for(int i=x1; i<x2; i++){
for(int j=y1; j<y2; j++){
map[i][j]++;
}
}
}
int ans = 0;
for(int i=0; i<105; i++){
for(int j=0; j<105; j++){
if(map[i][j] > 0) ans++;
}
}
cout<<ans<<endl;
}
return 0;
}