杭电OJ2056

杭电OJ2056

这道题看似简单,但挺考验代码能力以及是否考虑周全的。先写一写伪代码:
if(两个矩形有相交部分)
printf(输出相交部分面积)
else printf(0.00\n);
将第一个矩形的左下角,右上角坐标分别设为(n1,m1),(n2,m2),同样第二个设个(n3,m3),(n4,m4),由于题目所给的坐标不一定是给出左下角、右下角坐标,因此应事先进行数据处理。
下面先解决简单的——没有相交的情况:
n1>n4||m1>m4||n2<n3||m2<m3(画个图比划一下就知道)
相交情况:
设相交部分的矩形左下角,右下角坐标分别为(xl,yl),(xr,yr),画个图观察一下知,xl=max(n1,n3),yl=max(m1,m3), xr=min(n2,n4), yr=min(m2,m4);
代码如下:

#include<cstdio>
#include<algorithm>
#include<cmath>
using namespace std;
int main(){
	double x1,y1,x2,y2,x3,y3,x4,y4;
	double n1,m1,n2,m2,n3,m3,n4,m4;
	double wl,hl,wr,hr;
	double sum;
	while(scanf("%lf %lf %lf %lf %lf %lf %lf %lf",&x1,&y1,&x2,&y2,&x3,&y3,&x4,&y4)!=EOF){
	//全部坐标统一先转换为左下角、右下角类型,便于计算香相交部分
		n1 = min(x1,x2);m1=min(y1,y2);
		n2 = max(x1,x2);m2=max(y1,y2);
		n3 = min(x3,x4);m3=min(y3,y4);
		n4 = max(x3,x4);m4=max(y3,y4);
		//画图可看出条件
		if(n1>n4||m1>m4||n2<n3||m2<m3)
		    printf("0.00\n");
		else{
		//求相交部分高宽
			wl=max(n1,n3);wr=min(n2,n4);
			hl=max(m1,m3);hr=min(m2,m4);
			sum = abs(wr-wl)*abs(hr-hl);
			printf("%.2lf\n",sum);
		}
	}
	return 0;
} 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

name大权子

有钱的捧个钱场

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值