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;

}

原文地址:https://www.cnblogs.com/yuelingzhi/p/2131895.html