传送门:http://icpc.njust.edu.cn/Problem/Hdu/1264/ 题意大致是给你几个矩形的两点坐标,求他们覆盖的面积,重叠部分只能计算一次。 思路:既然每块区域只能计算一次,那么我们完全可以用一个二维数组来表示每个区域被覆盖的情况,0表示未覆盖,1表示被覆盖。最后整个二维数组遍历一遍,计算被覆盖的区域个数即可。 上代码:
#include<iostream> #include<string.h> #include<iomanip> using namespace std; int main() { int x1, y1, x2, y2, area = 0;//矩形的对角点以及区域面积 int square[105][105];//坐标0-100所以数组开到105 memset(square, 0, sizeof(square)); while (cin >> x1 >> y1 >> x2 >> y2) { if (x1 == -1 && y1 == -1 && x2 == -1 && y2 == -1) { for (int i = 0; i <= 100; i++) { for (int j = 0; j <= 100; j++) { if (square[i][j] == 1) area++; } } cout << area << endl; area = 0; memset(square, 0, sizeof(square)); continue; } if (x1 == -2 && y1 == -2 && x2 == -2 && y2 == -2) { for (int i = 0; i < 100; i++) { for (int j = 0; j < 100; j++) { if (square[i][j] == 1) area++; } } cout << area << endl; area = 0; break; } int t; if (x1 > x2) { t = x1; x1 = x2; x2 = t; } if (y1 > y2) { t = y1; y1 = y2; y2 = t; } for (int i = x1; i < x2; i++) { for (int j = y1; j < y2; j++) { square[i][j] = 1; } } } return 0; }