HDU 2073 无限的路

解题报告:题目大意:题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2073

首先要说的是同在一条直线上的所有的点(x,y)的x+y都相等,并且这个和表示这个点在第几条直线上,所以我们可以先求出从原点到所有的直线的第一个点的距离,先打一个表,

然后到点(x,y)的距离只要在到第一个点的距离的基础上再加上一个sqrt(2.0*x*x),即(x,y)点到它所在的直线的第一个点的距离就等于从原点到(x,y)的距离,然后要求(x1,y1)到(x2,y2)的距离只要用这两个点到原点的距离只差再取绝对值就可以了。

 1 #include<cstdio>
 2 #include<cstring>
 3 #include<cmath>
 4 double length[500];
 5 void dabiao() {
 6     length[0]=0;
 7     length[1]=1;
 8     for(double i=2;i<=205;++i)
 9     length[(int)i]=length[(int)i-1]+sqrt(2.0)*(i-1)+sqrt(i*i+(i-1)*(i-1));
10 }
11 int main() {
12     double x1,y1,x2,y2,l1,l2;
13     int T;
14     dabiao();
15     while(scanf("%d",&T)!=EOF) {
16         while(T--) {
17             scanf("%lf%lf%lf%lf",&x1,&y1,&x2,&y2);
18             l1=sqrt(2.0*x1*x1)+length[(int)(x1+y1)];
19             l2=sqrt(2.0*x2*x2)+length[(int)(x2+y2)];
20             printf("%.3lf\n",fabs(l2-l1));
21         }
22     }
23     return 0;
24 }
View Code

 

posted @ 2013-05-31 21:42  xiaxiaosheng  阅读(135)  评论(0编辑  收藏  举报