杭电ACM——2056

这道题看似简单,但挺考验代码能力以及是否考虑周全的。先写一写伪代码:
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 xl,yl,xr,yr;
	double square;
	while(~scanf("%lf %lf %lf %lf %lf %lf %lf %lf",&x1,&y1,&x2,&y2,&x3,&y3,&x4,&y4))
	{
		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
		{
			xl=max(n1,n3);yl=max(m1,m3);
			xr=min(n2,n4);yr=min(m2,m4);
			square=abs(xl-xr)*abs(yl-yr);
			printf("%.2lf\n",square);
		}
	}
	return 0;
 } 

小结:做题之前别急,写好思路(伪代码),找准主要对象(相交矩形),最后要对自己的代码有些信心,对失败要做好心理准备,但对成功也要抱有希望。还有, 测试的时候别烦,但也别太慢了。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值