CCF:202303-1 田地丈量--C++

思路:对每一块土地依次判断,判断横坐标与限定区域横坐标的交集以及纵坐标与限定区域纵坐标的交集,两个交集长度相乘则是该块地落在限定区域的面积

可以通过循环来判断

或者直接x=min{x2,a}-max{x1,0},y=min{y2,b}-max{y1,0}

x与y就是某块地与限定区域的交集,其中(x1,y1)是n块地中的某块地的左下角坐标,(x2,y2)是右上角坐标

#include<iostream>

/*
#include<cmath> 
#include<cstring>
#include<string>
#include<string.h>
#include<stdio.h>
#include<algorithm>*/

using namespace std;
int TLeft[105][3];//记录n块地的 左下脚坐标
int TRight[105][3];//记录n块地的右上角坐标 

int main()
{
  
  int n;// n块地
  int a,b;//限定区域右上角坐标 
  
  cin>>n>>a>>b;
  
  
  
  
  
  int i;

  for(i=0;i<n;i++)
  {
  	/*for(int j=0;j<2;j++)//先输入左下角坐标,再输入右上角坐标 
  	{
  		for(int k=0;k<2;k++)//TLeft[i][] 代表第i块地的左下角坐标的x与y 
  		{
  		  if(j==0)
		  cin>>TLeft[i][k];
		  else
		  cin>>TRight[i][k];
		  }
  		
	  }*/
	  
	   cin>>TLeft[i][0];
	    cin>>TLeft[i][1];
	    cin>>TRight[i][0];
	    cin>>TRight[i][1];

  	
   } 
  
   
   
  //计算重复面积
   
   int hSum;//记录横坐标重复的长 
   int lSum;//记录纵坐标重复的长
   int SameS=0;//记录n块地中每块地的重复面积
   
    int j;
    //int l;
    int h;
   for(j=0;j<n;j++)
   {
   	    lSum=0;
   		hSum=0;
   		
   	for(h=TLeft[j][0];h<=TRight[j][0];h++)
   	{
   		
   		if((0<=h)&&(h<=a))//横坐标开始重复 
		   {
			    hSum++;	
			}    
	   }
	   
	   for(int l=TLeft[j][1];l<=TRight[j][1];l++) //看纵坐标重复的多少
				{
					if((0<=l)&&(l<=b))
					{
						lSum++; 
					}
				}
				 
	   if(hSum!=0&&lSum!=0) 
		 SameS=SameS+(hSum-1)*(lSum-1); 
   }
   
   cout<<SameS;
    return 0; 
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值