CCF 202303-1 土地丈量

题目

自行从官网查找即可

解题思路以及代码

#include<iostream>
using namespace std;    

int area( int x1, int y1, int x2, int y2,int a ,int b){
    //求(0,0)和(a,b)组成的矩形和(x1,y1)和(x2,y2)组成矩形的交集
    int minx=x1<x2?x1:x2;
    int miny=y1<y2?y1:y2;
    int maxx=x1>x2?x1:x2;   
    int maxy=y1>y2?y1:y2;
    //不相交的情况
    if(minx>a || miny>b || maxx<0 || maxy<0){
        return 0;
    }
    else if(minx>=0&&miny>=0&&maxx<=a&&maxy<=b){
        //判断完全包含的情况
        return (maxx-minx)*(maxy-miny);
    }
    else{
        //判断部分相交的情况    
        int max_right=maxx>a?a:maxx;
        int min_right=minx<0?0:minx;
        int max_up=maxy>b?b:maxy;
        int min_down=miny<0?0:miny;
        return (max_right-min_right)*(max_up-min_down);
    }

}

int main(){
    int n,a,b,x1,x2,y1,y2;
    cin>>n>>a>>b;
    int sum=0;
    for (int  i = 0; i < n; i++)
    {
        cin>>x1>>y1>>x2>>y2;
        // cout<<area(x1,y1,x2,y2,a,b)<<endl;
        sum+=area(x1,y1,x2,y2,a,b);
    }
    cout<<sum<<endl;

    return 0;
}

需要解释的地方只是在部分相交的地方,你们可以自行画一点图进行辅助,用这种比较方法可以只需要四个三目运算符即可实现面积的求解,难度较低。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值