zoukankan      html  css  js  c++  java
  • HDU3400 三分套三分

    题意

    就是给你两条线段AB , CD ,一个人在AB以速度p跑,在CD上以q跑,

    在其他地方跑速度是r。问你从A到D最少的时间。

    三分AB ,然后再三分CD ,模板题目,这题卡精度 eps不能少

     1 #include <cstdio>
     2 #include <cstring>
     3 #include <queue>
     4 #include <cmath>
     5 #include <algorithm>
     6 #include <set>
     7 #include <iostream>
     8 #include <map>
     9 #include <stack>
    10 #include <string>
    11 #include <vector>
    12 #define  pi acos(-1.0)
    13 #define  eps 1e-9
    14 #define  fi first
    15 #define  se second
    16 #define  rtl   rt<<1
    17 #define  rtr   rt<<1|1
    18 #define  bug         printf("******
    ")
    19 #define  mem(a,b)    memset(a,b,sizeof(a))
    20 #define  name2str(x) #x
    21 #define  fuck(x)     cout<<#x" = "<<x<<endl
    22 #define  f(a)        a*a
    23 #define  sf(n)       scanf("%d", &n)
    24 #define  sff(a,b)    scanf("%d %d", &a, &b)
    25 #define  sfff(a,b,c) scanf("%d %d %d", &a, &b, &c)
    26 #define  sffff(a,b,c,d) scanf("%d %d %d %d", &a, &b, &c, &d)
    27 #define  pf          printf
    28 #define  FRE(i,a,b)  for(i = a; i <= b; i++)
    29 #define  FREE(i,a,b) for(i = a; i >= b; i--)
    30 #define  FRL(i,a,b)  for(i = a; i < b; i++)+
    31 #define  FRLL(i,a,b) for(i = a; i > b; i--)
    32 #define  FIN         freopen("data.txt","r",stdin)
    33 #define  gcd(a,b)    __gcd(a,b)
    34 #define  lowbit(x)   x&-x
    35 using namespace std;
    36 typedef long long  LL;
    37 typedef unsigned long long ULL;
    38 const int mod = 1e9 + 7;
    39 const int maxn = 2e5 + 10;
    40 const int INF = 0x3f3f3f3f;
    41 const LL INFLL = 0x3f3f3f3f3f3f3f3fLL;
    42 int t;
    43 double P, Q, R, len1, len2;
    44 struct node {
    45     double x, y;
    46 } a, b, c, d, temp1, temp2;
    47 double dist ( node a, node b ) {
    48     return sqrt ( eps + ( a.x - b.x ) * ( a.x - b.x ) + ( a.y - b.y ) * ( a.y - b.y ) );
    49 }
    50 void caltemp1 ( double cnt ) {
    51     temp1.x = a.x + ( b.x - a.x ) / len1 * cnt;
    52     temp1.y = a.y + ( b.y - a.y ) / len1 * cnt;
    53 }
    54 void caltemp2 ( double cnt ) {
    55     temp2.x = d.x + ( c.x - d.x ) / len2 * cnt;
    56     temp2.y = d.y + ( c.y - d.y ) / len2 * cnt;
    57 }
    58 double check ( double cnt ) {
    59     caltemp1 ( cnt );
    60     double l = 0, r = len2, ll, rr, ans1, ans2;
    61     while ( r - l > eps ) {
    62         ll = ( 2 * l + r ) / 3, rr = ( 2 * r + l ) / 3;
    63         caltemp2 ( ll );
    64         ans1 = dist ( temp1, temp2 ) / R + dist ( d, temp2 ) / Q;
    65         caltemp2 ( rr );
    66         ans2 = dist ( temp1, temp2 ) / R + dist ( d, temp2 ) / Q;
    67         if ( ans1 < ans2 ) r = rr;
    68         else l = ll;
    69     }
    70     return ans1 + dist ( temp1, a ) / P;
    71 }
    72 int main()  {
    73     scanf ( "%d", &t );
    74     while ( t-- ) {
    75         scanf ( "%lf%lf%lf%lf", &a.x, &a.y, &b.x, &b.y );
    76         scanf ( "%lf%lf%lf%lf", &c.x, &c.y, &d.x, &d.y );
    77         scanf ( "%lf%lf%lf", &P, &Q, &R );
    78         len1 = dist ( a, b ), len2 = dist ( c, d );
    79         double l = 0, r = len1, ll, rr;
    80         while ( r - l > eps ) {
    81             ll = ( 2 * l + r ) / 3, rr = ( 2 * r + l ) / 3;
    82             if ( check ( ll ) < check ( rr ) ) r = rr;
    83             else l = ll;
    84         }
    85         printf ( "%.2f
    ", check ( ll ) );
    86     }
    87     return 0;
    88 }
    View Code
  • 相关阅读:
    用Iterator实现遍历集合
    SimpleDateFormat使用详解 <转>
    Java学习之Iterator(迭代器)的一般用法 (转)
    Java:String和Date、Timestamp之间的转换
    关于PreparedStatement.addBatch()方法 (转)
    JavaBean入门及简单的例子
    Tomcat7.0无法启动解决方法[failed to start]
    executeQuery、executeUpdate 和 execute
    jquery中attr和prop的区别
    Jquery的parent和parents(找到某一特定的祖先元素)
  • 原文地址:https://www.cnblogs.com/qldabiaoge/p/9979604.html
Copyright © 2011-2022 走看看