专栏文章

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

P12326题解参与者 1已保存评论 0

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
0 条
当前快照
1 份
快照标识符
@mipiexen
此快照首次捕获于
2025/12/03 12:31
3 个月前
此快照最后确认于
2025/12/03 12:31
3 个月前
查看原文

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

思路:

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

code:

CPP
#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:

CPP
#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;
}
希望管理员大大能让我过

评论

0 条评论,欢迎与作者交流。

正在加载评论...