zoukankan      html  css  js  c++  java
  • hdu 4717 The Moving Points(三分)

    题目链接:hdu 4717 The Moving Points

    题意:

    在二维平面上有n个点,每个点给出移动的方向和速度。

    问在某个时刻,这些点中最大距离最小是多少,输出时刻和距离。

    题解:

    我们可以知道,每个点对的距离要么是单调递增,要么是有一个峰的函数。

    举例画一下可知道合成的这个函数最多只有一个峰,所以可以用三分求解。

     1 #include<bits/stdc++.h>
     2 #define F(i,a,b) for(int i=a;i<=b;++i)
     3 using namespace std;
     4 
     5 const int N=307;
     6 int t,n,cas;
     7 double X[N],Y[N],VX[N],VY[N];
     8 
     9 double dis(double a,double b,double c,double d){return sqrt((c-a)*(c-a)+(d-b)*(d-b));}
    10 
    11 double check(double time)
    12 {
    13     double mx=0;
    14     F(i,1,n)F(j,1,n)
    15     mx=max(mx,dis(X[i]+time*VX[i],Y[i]+time*VY[i],X[j]+time*VX[j],Y[j]+time*VY[j]));
    16     return mx;
    17 }
    18 
    19 int main(){
    20     scanf("%d",&t);
    21     while(t--)
    22     {
    23         scanf("%d",&n);
    24         F(i,1,n)scanf("%lf%lf%lf%lf",X+i,Y+i,VX+i,VY+i);
    25         double l=0,r=1e7,mid,mmid;
    26         F(i,1,100)
    27         {
    28             mid=(l+r)/2,mmid=(mid+r)/2;
    29             if(check(mid)<check(mmid))r=mmid;else l=mid;
    30         }
    31         printf("Case #%d: ",++cas);
    32         check(l)>check(r)?printf("%.2f %.2f
    ",l,check(l)):printf("%.2f %.2f
    ",r,check(r));
    33     }
    34     return 0;
    35 }
    View Code
  • 相关阅读:
    elasticsearch的安装
    default_scope and unscoped
    RSpec + Spork + Autotest 给Rails 3添加快速自动化测试
    ubuntu收过带个winmail.dat的邮件
    网站链接
    github
    js笔记
    mba首页js
    mba精锐视角js
    mongodb常用命令
  • 原文地址:https://www.cnblogs.com/bin-gege/p/6910657.html
Copyright © 2011-2022 走看看