zoukankan      html  css  js  c++  java
  • hduoj 2073 无限的路

    无限的路

    Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
    Total Submission(s): 8383    Accepted Submission(s): 4384


    Problem 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
     
    【思路】*划分为求俩线的差
               *求每一条线时要求两种情况: 
                     1斜率为-1的  double sum = s*(s-1)*sqrt(2)/2;  sum += a*sqrt(2);
                     2斜率不为-1的部分:
                  for(i = s; i > 0; i--)        
    sum += sqrt((i-1)*(i-1) + i*i);
    AC代码:
     1 #include<cstdio>
     2 #include<cmath>
     3 double fun(int a, int b)
     4 {
     5     int i, s = a + b;
     6     //斜率为-1的线段的距离 
     7     double sum = s*(s-1)*sqrt(2)/2;
     8     sum += a*sqrt(2);
     9     //斜率不是-1的线段的长度 
    10     for(i = s; i > 0; i--)        
    11         sum += sqrt((i-1)*(i-1) + i*i);
    12     return sum;
    13 }
    14 int main()
    15 {
    16     int n;scanf("%d", &n);
    17     while(n--)
    18     {
    19         int x1, x2, y1, y2;
    20         scanf("%d %d %d %d", &x1, &y1, &x2, &y2);
    21         printf("%.3lf
    ", fabs(fun(x1, y1)-fun(x2, y2)));
    22     }
    23     return 0;
    24 }
  • 相关阅读:
    Highcharts 连续的堆积面积图
    jQuery--each遍历使用方法
    C# 常用小技巧
    JSON对象遍历方法
    T-SQL生成X个不重复的Y位长度的随机数
    SQLServer如何快速生成100万条不重复的随机8位数字
    ftp和http断点续传及下载的Delphi实现
    Delphi与Windows 7下的用户账户控制(UAC)机制
    Win7/Win10下的进程操作
    运行Delphi 2007 IDE提示无法打开"EditorLineEnds.ttr"文件
  • 原文地址:https://www.cnblogs.com/123tang/p/5835756.html
Copyright © 2011-2022 走看看