思路:对每一块土地依次判断,判断横坐标与限定区域横坐标的交集以及纵坐标与限定区域纵坐标的交集,两个交集长度相乘则是该块地落在限定区域的面积
可以通过循环来判断
或者直接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;
}