HDU2073
纯几何水题
把每个带点的斜线看成一层
x+y为当前层数,以此为基础做题要好做,另外再注意x1+y1==x2+y2的情况
#include<stdio.h>
#include<math.h>
int main()
{
double sum,a,b;
int t,i,n,x1,x2,y1,y2;
scanf("%d",&n);
while(n)
{
sum=0;
scanf("%d %d %d %d",&x1,&y1,&x2,&y2);
if(x1==x2&&y1==y2)//把两个特殊情况先讨论,这个是完全相同
{
n--;
printf("0.000\n");
continue;
}
if(x1+y1>x2+y2)
{
t=x1;
x1=x2;
x2=t;
t=y1;
y1=y2;
y2=t;
}
if(x1+y1==x2+y2)//同一斜线中
{
if(x1>x2)
{t=x1;
x1=x2;
x2=t;
t=y1;
y1=y2;
y2=t;}
sum=sqrt((x2-x1)*1.0*(x2-x1)*1.0+(y1-y2)*(y1-y2));
n--;
printf("%.3lf\n",sum);
continue;
}
a=x1+y1;
b=x2+y2;
for(i=a;i<b;i++)
{
if(i==a)sum=sum+sqrt(a*a+(a+1)*(a+1));
else sum=sum+sqrt(i*i+i*i*1.0)+sqrt(i*i+(i+1)*(i+1)*1.0);
}
sum=sum+sqrt(2*x2*x2*1.0)+sqrt(2*y1*y1*1.0);
printf("%.3lf\n",sum);
n--;
}
return 0;
}