测评会员优惠活动进行中 · 开通 VIP,有效期内测评不限次 VIP 优惠中 · 测评不限次 立即查看

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; }
上一题 下一题