2022年码蹄杯真题 污渍 题型:思维

121 阅读1分钟

码题集OJ-污渍 (matiji.net) image.png

样例解释

如下图所示,被两个点污染的是两个正方形,每个正方形的边长都是2,都由4个边长为1的格子构成,但是因为两个正方形存在重叠部分,所以被污染的格子只有七个。 image.png

因此,这道题就是让我们求两个正方形重叠部分的正方形的面积。重叠有两种重叠方式:

image.png

重叠正方形的面积求法

s=xys=x*y

重叠正方形的x边求法

右x端点:可以用公式表示为x=min(a+v1,c+v2);x=min(a+v1,c+v2);

左x端点:a,c里面较大的那个x。

x边:intx=min(a+v1,c+v2)max(a,c);int x=min(a+v1,c+v2)-max(a,c);

重叠正方形的y边求法

重叠正方形的y坐标我们也可以用同样的方式求出:

inty=min(b,d)max(bv1,dv2)int y=min(b,d)-max(b-v1,d-v2)

code

#include<bits/stdc++.h>
using namespace std;

int a,b,v1,c,d,v2;
int main()
{
	cin>>a>>b>>v1>>c>>d>>v2;
	
	//求重叠面积  如果没有重叠的话相减肯定为0 
	  //求x
	    int x=min(a+v1,c+v2)-max(a,c);
	  //求y
	    int y=min(b,d)-max(b-v1,d-v2);
		
	  int s=x*y; //重叠的面积 
	  
	  //求一下全部面积
	  int ans=v1*v1+v2*v2;
	  
	  if(x>0&&y>0)  //如果大于0说明存在重叠部分 
	  {
	  	ans-=s;
	   } 
	   cout<<ans;
	
	
	return 0;
}

image.png