HDU2073 无限的路(递推)

#include<stdio.h>
#include<math.h>
#include<string.h>
double zu[210];
void dabiao()
{
	zu[0]=0;
	zu[1]=1;
	for(int i=2;i<=200;i++)
	{
		double y;
		double m,n;//double sqrt(double x);sqrt函数参数类型和返回值配套。
		m=(i-1)*(i-1)+(i-1)*(i-1);
		n=i*i+(i-1)*(i-1);
		y=zu[i-1]+sqrt(m)+sqrt(n);//(a,0)到(0,a)的斜线上所有整数点一组。从(0,0)到(0,a)的距离为(0,0)到(0,a-1)的距离,加上(0,a-1)(a-1,0)两点间的距离,再加上(a-1,0)(0,a)两点间的距离。
		zu[i]=y;
	}
}
double way(int x,int y)
{
	double w=0;
	w=zu[x+y]+x*sqrt(2.0);
	return w;
		
}
int main()
{
	int x1,y1,x2,y2,n;
	double w1,w2,w;
	dabiao();
	while(scanf("%d",&n)!=EOF)
	{
	while(n--)
	{
		scanf("%d%d%d%d",&x1,&y1,&x2,&y2);
		w1=way(x1,y1);
		w2=way(x2,y2);
		w=w1-w2;
		if(w<0)w=-w;
		printf("%.3lf\n",w);
	}
	}
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值