A23496. 矩形纸片小X有一个10^9行10^9列的网格纸,每个格子都是一个单位长度的正方形。现在小X还有两个矩形纸片,矩形的边长都是单位长度的整数倍。第一个矩形纸片的长为a,宽为b,第二个矩形纸片的长为c,宽为d。小X把第一个纸片放在了整张网格纸的左上角,再把第二个纸片的左上角放在第x行第y列的格子的左上角上,并且不旋转或者翻转纸片。小X想知道两张纸片覆盖网格纸的总面积。例如,当a=2,b=4,c=5,d…
填空题
中等
知识点
题目描述
矩形纸片
小X有一个10^9行10^9列的网格纸,每个格子都是一个单位长度的正方形。

现在小X还有两个矩形纸片,矩形的边长都是单位长度的整数倍。第一个矩形纸片的长为a,宽为b,第二个矩形纸片的长为c,宽为d。
小X把第一个纸片放在了整张网格纸的左上角,再把第二个纸片的左上角放在第x行第y列的格子的左上角上,并且不旋转或者翻转纸片。
小X想知道两张纸片覆盖网格纸的总面积。
例如,当a=2,b=4,c=5,d=3,x=2,y=3时,覆盖情况如下图所示,覆盖的总面积为21单位面积。
输入:一行6个正整数a,b,c,d,x,y。
输出:输出两张纸片覆盖网格纸的总面积。
样例输入1
2 4 5 3 2 3样例输入2
4 5 2 8 1 1样例输入3
5 5 5 5 2 3样例输出1
21样例输出2
26样例输出3
38提示
对于所有测试点: 1<=a,b,c,d,x,y<=1000。
对于测试点1-2:保证a=b=c=d。
对于测试点3-4:保证x=y=1。
参考答案
#include <iostream>
#include <algorithm>
using namespace std;
int main() {
int a, b, c, d, x, y;
cin >> a >> b >> c >> d >> x >> y;
// 计算两个矩形的面积
int area1 = a * b;
int area2 = c * d;
// 计算重叠区域的坐标范围
int x1 = 1, y1 = 1;
int x2 = x1 + a - 1, y2 = y1 + b - 1; // 第一个矩形右下角
int x3 = x, y3 = y;
int x4 = x3 + c - 1, y4 = y3 + d - 1; // 第二个矩形右下角
// 重叠区域的宽和高(若不重叠则为0)
int overlap_w = max(0, min(x2, x4) - max(x1, x3) + 1);
int overlap_h = max(0, min(y2, y4) - max(y1, y3) + 1);
int overlap = overlap_w * overlap_h;
cout << area1 + area2 - overlap << endl;
return 0;
}
上一题
下一题