• 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 }
  • 相关阅读:
    @property @synthesize的含义以及误区。
    OC中类的扩展介绍
    Thinking in Java第三、四章学习笔记----操作符与控制执行流程
    LeetCode之Easy篇 ——(12)Integer to Roman
    LeetCode之Easy篇 ——(9)Palindrome Number
    LeetCode之Easy篇 ——(7)Reverse Integer
    LeetCode之Easy篇 ——(1)Two Sum
    Java关键字汇总
    Thinking in Java 第二章学习笔记----一切都是对象
    php文件上传原理详解
  • 原文地址:https://www.cnblogs.com/123tang/p/5835756.html
Copyright © 2020-2023  润新知