蓝桥杯——算法训练——画图

蓝桥杯——算法训练——画图

一道小模拟
——————————————————————————————————————
资源限制
时间限制: 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 1n100 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;
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值