首页 > 代码库 > HDU-2073 无限的路

HDU-2073 无限的路

Description

甜甜从小就喜欢画图画,最近他买了一支智能画笔,由于刚刚接触,所以甜甜只会用它来画直线,于是他就在平面直角坐标系中画出如下的图形:

技术分享



甜甜的好朋友蜜蜜发现上面的图还是有点规则的,于是他问甜甜:在你画的图中,我给你两个点,请你算一算连接两点的折线长度(即沿折线走的路线长度)吧。

 

Input

第一个数是正整数N(≤100)。代表数据的组数。
每组数据由四个非负整数组成x1,y1,x2,y2;所有的数都不会大于100。

 

Output

对于每组数据,输出两点(x1,y1),(x2,y2)之间的折线距离。注意输出结果精确到小数点后3位。

 

Sample Input

5

0 0 0 1

0 0 1 0

2 3 3 1

99 99 9 9

5 5 5 5

 

Sample Output

1.000

2.414

10.646

54985.047

0.000


  找规律,

#include <iostream>
#include <cmath>
using namespace std;

int main(void)
{
    int x1, y1, x2, y2, n, t;
    
    cin >> n;
    
    while(n--)
    {
        double sum = 0;
        
        cin >> x1 >> y1 >> x2 >> y2;
        
        if(x1+y1 > x2+y2)
        {
            t = x1; x1 = x2; x2 = t;
            t = y1; y1 = y2; y2 = t;
            
        }
        
        if(x1==x2 && y1==y2)
        {
            cout << "0.000" << endl;
            continue;
            
        }
        else
        {
            for(int i = x1+y1+1; i <= x2+y2; i++)
            {
                sum += i*sqrt(2.0)+sqrt(i*i+(i-1)*(i-1));
                
                
            }
            
            sum -= (y2-y1)*sqrt(2.0);
            
        }
        
        printf("%.3lf\n", sum);
        
    }
    
    return 0;
}

 

HDU-2073 无限的路