ccf第一题,CCF201409-2 画图

 2023-09-22 阅读 19 评论 0

摘要:问题描述: 试题编号:201409-2试题名称:画图时间限制:1.0s内存限制:256.0MB问题描述: 问题描述   在一个定义了直角坐标系的纸上,画一个(x1,y1)到(x2,y2)的矩形指将横坐标范围从x1到x2,纵坐标范围从y1到y2之间的区域

问题描述:

试题编号: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。

解题思路:

将各个正方形面积累加起来,然后去掉重叠部分。哪些部分重叠也需要进行标记后才能判定。

数据量不大,直接循环枚举即可~

 

解题代码:

#include <iostream>
#include <cstring> 
using namespace std;
const int N = 100;
bool flag[N+1][N+1];
int main(){int n, x1, y1, x2, y2, sum=0;// 变量初始化memset(flag, false, sizeof(flag));// 输入数据,计算处理cin >> n;for(int i=1; i<=n; i++) {// 输入数据cin >> x1 >> y1 >> x2 >> y2;// 累加面积sum += (x2 - x1) * (y2 - y1);// 标记和去除重叠部分for(int i=x1; i<x2; i++)for(int j=y1; j<y2; j++) {if(flag[i][j])sum--;flag[i][j] = true;}}// 输出结果cout << sum << endl;return 0;
}

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/2/81928.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息