无限的路

思路是求(0,0)到输入第一个点的距离减去(0,0)到输入的第二个点的距离。每个距离又分为两种情况,第一种为斜率为负一的线距离和,利用横纵坐标之和确定的点在第p跟斜率为负一的线,先求前(p-1)跟的距离和 利用等差公式,从第一根到第(p-1)跟长度分别为根号2,2倍根号2…(p-1)根号2。(p-1)(1+p-1)/2sqrt(2),sum=(p-1)psqrt(2)/2;再加上点所占第p跟斜率为负一的直线为m*sqrt(2)。第二种为斜率非负一的直线和利用勾股定理求第p跟前面所有斜率为负一的直线距离和,注意第一个直线也可用此公式求值,根号下1^2 -0^2还等于一,所以不需要单独拿出来考虑,直接累加即可。
在这里插入图片描述
在这里插入图片描述

#include <stdio.h>
#include <stdlib.h>
#include<math.h>
double juli(int m, int n);
 int main()
 {
    int t;
    scanf("%d",&t);
    while(t--)
     {
        int x1,y1,x2,y2;
         scanf("%d %d %d %d",&x1,&y1,&x2,&y2);
         printf("%.3lf\n",fabs(juli(x1,y1)-juli(x2,y2)));
     }
     return 0;
}
double juli(int m, int n)
{
    int i,p=m+n;
    double sum=p*(p-1)*sqrt(2)/2;
    sum+=m*sqrt(2);
    for(i=p;i>0;i--)
    sum+=sqrt((i-1)*(i-1)+i*i);
    return sum;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值