hdu 2073 无限的路
http://acm.hdu.edu.cn/showproblem.php?pid=2073
这是一道分段处理题,第一步先把斜率为1的线段处理好: sum+=a*(a-1)*sqrt(2.0)/2; 第二步把线段斜率不为1的处理好: for(int i=a;i>0;--i) sum+=sqrt(i*i+(i-1)*(i-1)); 第三步把包括该点的线段加入: sum+=(a-y)*sqrt(2.0); 最后用前面的点与后面的点去差的绝对值。。。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>
int map[101][101];
double sss(int x,int y)
{
double sum=0;
int a=x+y;
sum+=a*(a-1)*sqrt(2.0)/2;
for(int i=a;i>0;--i)
sum+=sqrt(i*i+(i-1)*(i-1));
sum+=(a-y)*sqrt(2.0);
return sum;
}
int main()
{
int n,x1,y1,x2,y2;
double t;
scanf("%d",&n);
while(n--)
{
scanf("%d%d%d%d",&x1,&y1,&x2,&y2);
t=fabs(sss(x1,y1)-sss(x2,y2));
printf("%.3lf\n",t);
}
//system("pause");
return 0;
}