题目链接:https://www.hpuoj.com/contest/16/problem/H/
Problem Description:
单测试点时限: 1.0 秒
内存限制: 512 MB
Mo的老师给了他两个矩形,让他求两个矩形的面积并。Mo很忙没时间解决这种小case,请你帮他解决。
Input:
输入两行,每行四个整数 x,y,x1,y1 。(x,y) 是矩形左下角,(x1,y1) 是矩形的右上角. (0≤x,y,x1,y1≤1000)。
Output:
输出一个整数表示二个矩形的面积并。
Sample Input:
0 1 2 3
1 0 3 2
Sample Output:
7
思路:由每一个长方形都可以转化成无数个面积为1的小正方形,因此我们把两个长方形所覆盖到的小正方形都标记为1,最终就可以得出两个矩形的面积并了。
My Code:
#include<iostream>
#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<queue>
#include<math.h>
#include<set>
using namespace std;
#define INF 1e9
typedef long long ll;
const int MOD = (int)1e9 + 7;
int flag[1005][1005];
int main() {
int x,y,x0,y0;
int min_x = 9999,min_y = 9999,max_x0 = 0,max_y0 = 0;
for(int i = 0; i < 2; i++)
{
cin >> x >> y >> x0 >> y0;
min_x = min(min_x,x);
min_y = min(min_y,y);
max_x0 = max(max_x0,x0);
max_y0 = max(max_y0,y0);
for(int j = x; j < x0; j++)///标记矩形所覆盖到的小正方块
{
for(int k = y; k < y0; k++)
flag[j][k] = 1;
}
}
int ans = 0;
for(int i = min_x; i < max_x0; i++)///判断一共有多少个小正方块
{
for(int j = min_y; j < max_y0; j++)
{
if(flag[i][j] == 1)
ans++;
}
}
cout << ans << endl;
return 0;
}