CCF试题——画图
来源:互联网 发布:网络电话卡app制作 编辑:程序博客网 时间:2024/05/22 00:13
问题描述:
在一个定义了直角坐标系的纸上,画一个(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的小正方形给填充。计算公式Area=(y2-y1)*(x2-x1),这样先把所有的矩形面积求完,再计算所覆盖的面积,先判断该矩形的左下角横坐标是否在相邻矩形的左下角横坐标和右上角横坐标之间,如果是,那么就让相邻矩形的右上角坐标和该矩形的左下角坐标进行上述公式计算,最后再用总的面积和-覆盖的面积就是被上色的面积。
Code
#include <iostream>using namespace std;struct Coordinate //定义点的坐标{ int x1; int y1; int x2; int y2;};Coordinate Position[1000];int main(){ int n; int s = 0, cover = 0; cin >> n; for (int i=0;i<n;i++) //输入矩形的坐标,确定矩形大小 { cin >> Position[i].x1; cin >> Position[i].y1; cin >> Position[i].x2; cin >> Position[i].y2; } for (int i=0;i<n;i++) { int area; //计算矩形面积 area = (Position[i].x2 - Position[i].x1)*(Position[i].y2 - Position[i].y1); if (area<0) { area = -1 * area; } s += area; } for (int i = 0; i < n - 1; i++) { for (int j = i + 1; j < n; j++) { //判断矩形之间是否进行覆盖 if ((Position[j].x1 > Position[i].x1) && (Position[j].x1 < Position[i].x2)) { int x = Position[i].x2 - Position[j].x1; int y = Position[i].y2 - Position[j].y1; cover = x*y; s -= cover; } } } cout << s << endl; return 0;}
简化版
利用扫描法依次每行每行的进行扫描,如果存在被上色的小方块那么就+1,直到扫描完毕,这样根本不用担心矩形覆盖的问题了。
Code
#include <iostream>using namespace std;int main(){ int n; int count=0; int Coordinate[100][100]={0}; //先给数组初始化 cin >> n; for(int i=0;i<n;i++) { int Pos[4]; //x1,y1,x2,y2 cin>>Pos[0]>>Pos[1]>>Pos[2]>>Pos[3]; for(int j=Pos[0];j<Pos[2];j++) for(int k=Pos[1];k<Pos[3];k++) Coordinate[j][k]=1; //给数组赋值,一会进行判断了 } for(int i=0;i<100;i++) for(int j=0;j<100;j++) if(Coordinate[i][j]==1) count++; cout<<count<<endl; return 0;}
阅读全文
0 0
- CCF试题——画图
- CCF—画图 20140902
- ccf试题 画图
- CCF CSP试题 201409-2 画图
- CCF——画图(深搜模拟)
- CCF 画图
- 【CCF】画图
- CCF 画图
- ccf 画图
- CCF 画图
- CCF-画图
- CCF画图
- 【CCF 画图】
- ccf 画图
- ccf 画图
- ccf画图
- 201409-2 试题名称:画图(100分)ccf认证
- CCF试题——相邻数对
- linux export指令
- 深入java虚拟机面试
- BroadcastReceiver开机启动和动态注册
- 流形学习(Manifold Learning)理解
- Python3之自动登录
- CCF试题——画图
- 【LeetCode】 Reverse Linked List 翻转链表 ( Uber,FB )
- 《大型门户网站是这样炼成的》 项目源码视频教程免费下载
- textarea 存储与显示 保持格式
- 【python爬虫01】使用requests库模拟登录知乎
- 文章标题
- Android Studio使用jakewharton:butterknife
- leetcode
- MySQL 数据库设计总结