CCF测试题中的一道题,求大神解答!

NginxL 2014-12-04 09:14:46
问题描述

  在一个定义了直角坐标系的纸上,画一个(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。
...全文
3807 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
baidu_36249651 2016-09-26
  • 打赏
  • 举报
回复
#include "iostream" using namespace std; //定义数据结构,用来存储矩形的参数 class K { public: int x1; int x2; int y1; int y2; K(){} }; int main() { int count=0; int col=0,no=0; int n; cin>>n; int matrix[100][100]; for(col=0;col<100;col++) { for(no=0;no<100;no++) { //将数组元素都初始化成0,表示每个方框都未涂色 matrix[col][no]=0; } } K *p=new K(); for(int i=0;i<n;i++) { cin>>p[i].x1>>p[i].y1>>p[i].x2>>p[i].y2; } /* 检查输入是否正确 for(int j=0;j<n;j++) { cout<<p[j].x1<<p[j].y1<<p[j].x2<<p[j].y2<<endl; } */ for(int j=0;j<n;j++) { //第j个矩形 for(int x=p[j].x1;x<p[j].x2;x++) { for(int y=p[j].y1;y<p[j].y2;y++) { //对应元素置1,表示这个方框已被涂色 matrix[x][y]=1; } } } //遍历数组,计算被涂色的元素的个数 for(col=0;col<100;col++) { for(no=0;no<100;no++) { if(matrix[col][no]==1) { count++; } } } cout<<count<<endl; return 0; }
sinat_31083025 2015-09-12
  • 打赏
  • 举报
回复
import java.util.*;     public class Main_CCF { public static void main(String[] args) {  new Main_CCF().run();  } public  void run() {  int [][] matrix_N_N = new int[100][100]; //定义100阶方矩阵 //默认开始是全部置0的,若不是就自己在此加入矩阵初始化。  int x1,y1,x2,y2,cnt=0;  Scanner fin = new Scanner(System.in);  int N = fin.nextInt();  int [][] matrix_N_4 = new int[N][4];   for (int i = 0; i < N; i++) {    for (int j = 0; j <4; j++) {     matrix_N_4[i][j] = fin.nextInt();    }    x1=matrix_N_4[i][0];    y1=matrix_N_4[i][1];    x2=matrix_N_4[i][2];    y2=matrix_N_4[i][3];    for (int k = x1; k < x2; k++) {//标记相应点     for (int w = y1; w < y2; w++) {      matrix_N_N[k][w]=1;     }        }   }       for (int i = 0; i < 100; i++) {//统计标志点的个数    for (int j = 0; j < 100; j++) {     if (matrix_N_N[i][j]==1) {      cnt++; //     System.out.print("("+i+","+j+");");     }        }      }   System.out.println(cnt); //打印结果  fin.close();   } }
pumpkin93 2015-03-24
  • 打赏
  • 举报
回复
楼主这道题做出答案了没?求解~
Sky丶Memory 2014-12-05
  • 打赏
  • 举报
回复
LS说的是一个方法,不过统计颜色可以在每读入一个矩形就可进行统计,如果LZ想追寻效率更好的算法,可以了解下树状数组或者线段树,它们都能降低时间复杂度,大约为O(N * lgX * lgY)
dbhme 2014-12-04
  • 打赏
  • 举报
回复
开个100X100的数组,开始全置0,涂了就置1,最后统计1的个数

33,008

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧