题解:P12326 [蓝桥杯 2023 省 Java B] 矩形总面积

· · 题解

题解:P12326 [蓝桥杯 2023 省 Java B] 矩形总面积

题目

思路:

先将两个矩阵的面积算出来,分别是 (x2-x1)*(y2-y1) , (x4-x3)*(y4-y3) ,再将重叠部分的面积算出来,再将它减去。

code:

#include<bits/stdc++.h>
using namespace std;
int x,y,x2,y2,x3,y3,x4,y4;
int main(){
    cin>>x>>y>>x2>>y2>>x3>>y3>>x4>>y4;
    int sum1=(y2-y)*(x2-x);//求R1总面积
    int sum2=(y4-y3)*(x4-x3);//求R2总面积
    //计算重叠区域的坐标
    int cx1=max(x,x3),cy1=max(y,y3);
    int cx2=min(x2,x4),cy2=min(y2,y4);
    //计算重叠区域的面积
    int csum=0;
    if(cx1<cx2&&cy1<cy2){
        csum=(cx2-cx1)*(cy2-cy1);
    }
    cout<<sum1+sum2-csum;
}

然后就75分了,是因为数据比较大,爆int了,我们可以使用足够大的数据类型来存储面积计算结果,避免爆掉。

code:

#include<bits/stdc++.h>
#define int long long //宏定义,将int变成long long的效果
using namespace std;
int x,y,x2,y2,x3,y3,x4,y4;
signed main(){//无符号整型
    cin>>x>>y>>x2>>y2>>x3>>y3>>x4>>y4;
    int sum1=(y2-y)*(x2-x);//求R1总面积
    int sum2=(y4-y3)*(x4-x3);//求R2总面积
    //计算重叠区域的坐标
    int cx1=max(x,x3),cy1=max(y,y3);
    int cx2=min(x2,x4),cy2=min(y2,y4);
    //计算重叠区域的面积
    int csum=0;
    if(cx1<cx2&&cy1<cy2){
        csum=(cx2-cx1)*(cy2-cy1);
    }
    cout<<sum1+sum2-csum;
}

AC记录

希望管理员大大能让我过