hdu2073-无限的路

8 篇文章 0 订阅
5 篇文章 0 订阅

hdu2073


几何简单题


#include<iostream>
#include<math.h>
#include<stdio.h>
using namespace std;

struct point
{
	int x,y;
};

double ans(point P1,point P2)
{
	if((P1.x+P1.y)==(P2.y+P2.x))
		return sqrt((P1.x-P2.x)*(P1.x-P2.x)+(P1.y-P2.y)*(P1.y-P2.y));
	int i,t=P2.x+P2.y-P1.y-P1.x;//printf("t=%d\n",t);
	double ret=0;
	for(i=P1.x+P1.y;i<P2.y+P2.x;i++)
	{
		ret+=sqrt(i*i+(i+1)*(i+1));
	//	printf("i=%d ,%.03lf\n",i,sqrt(i*i+(i+1)*(i+1)));
	}
	point t1={P1.x+P1.y,0},t2={0,P2.y+P2.x};
	ret+=ans(P1,t1)+ans(t2,P2);
//	printf("%.03lf+%.03lf\n",ans(P1,t1),ans(t2,P2));
	for(i=P1.x+P1.y+1;i<P2.y+P2.x;i++)
	{
		point t1={i,0},t2={0,i};
		ret+=ans(t1,t2);
	}
	return ret;
}

int main()
{
	int i,j,T;
	point P1,P2;
	scanf("%d",&T);
	while(T--)
	{
		scanf("%d%d%d%d",&P1.x,&P1.y,&P2.x,&P2.y);
		if(P1.x+P1.y>P2.x+P2.y)	swap(P1,P2);
		printf("%.03lf\n",ans(P1,P2));
	}
	return 0;
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值