csp 田地丈量

在这里插入图片描述

		4 10 10
		0 0 5 5
		5 -2 15 3
		8 8 15 15
		-2 10 3 15
		
		样例输出
		44

在这里插入图片描述

解题思路:
由题意可知,(a,b)坐标必定大于,都位于第一象限,即所计算的面积必定都在第一象限内。通过观察样例可知,通过对输入的每一个坐标进行讨论,可以将所有的坐标都转换在第一象限里。每一个坐标的横纵坐标又要分开讨论,分三种情况,分别是在(a,b)范围之内,在(a,b)范围之外(横坐标大于a,纵坐标大于b),其次就是坐标出现负数的情况,这个时候就需要把他变换到第一象限来,之后就是横坐标相减得到长(宽),纵坐标相减得到宽(长),二者相乘就得到了面积,之后在把所有的面积都累计相加即可。


#include <iostream>
using namespace std;

int main()
{
   int n,a,b;
   cin>>n>>a>>b;
   
   int x1,y1,x2,y2,sum = 0;
   for(int i = 0;i < n;i++)
   {
   	  cin>>x1>>y1>>x2>>y2;
   	  
   	  if(x1 >= 0&&x1 <= a) x1 = x1;
   	  else if(x1 < 0) x1 = 0;
   	  else x1 = a;
   	  
   	  if(y1 >= 0&&y1 <= b) y1 = y1;
   	  else if(y1 < 0) y1 = 0;
   	  else y1 = b;
   	  
   	  if(x2 >= 0&&x2 <= a) x2 = x2;
   	  else if(x2 < 0) x2 = 0;
   	  else x2 = a;
   	  
   	  if(y2 >= 0&&y2 <= b) y2 = y2;
   	  else if(y2 < 0) y2 = 0;
   	  else y2 = b;
   	  
   	  sum += (x2-x1)*(y2-y1);
   }	
   
   cout<<sum<<endl;
   return 0;
} 
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值