Hdu 3694 Fermat Point in Quadrangle(三分)

题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=3694

思路:三分竟然能水过。。。。感觉不是很对。。。。

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
const double eps=1e-7;
struct Node
{
    double x,y;
};
Node a[5];
double minx,maxx,miny,maxy;
double dist(double x,double y)
{
    double sum=0;
    for(int i=0;i<4;i++)
        sum+=sqrt((a[i].x-x)*(a[i].x-x)+(a[i].y-y)*(a[i].y-y));
    return sum;
}
double checky(double x)
{
    double ly,ry,midy,midmidy;
    ly=miny,ry=maxy,midy=(ly+ry)/2.0;
    while(ry-ly>eps)
    {
        midy=(ly+ry)/2.0;
        midmidy=(midy+ry)/2.0;
        if(dist(x,midy)<dist(x,midmidy))
            ry=midmidy;
        else ly=midy;
    }
    return dist(x,midy);
}
int main()
{
    while(scanf("%lf%lf%lf%lf%lf%lf%lf%lf",&a[0].x,&a[0].y,&a[1].x,&a[1].y,&a[2].x,&a[2].y,&a[3].x,&a[3].y)==8)
    {
        if(a[0].x<0) break;
        minx=a[0].x,maxx=a[0].x;
        miny=a[0].y,maxy=a[0].y;
        for(int i=0;i<4;i++)
        {
            minx=min(minx,a[i].x);
            maxx=max(maxx,a[i].x);
            miny=min(miny,a[i].y);
            maxy=max(maxy,a[i].y);
        }
       double lx,rx,midx,midmidx;
       lx=minx,rx=maxx,midx=(lx+rx)/2.0;
       while(rx-lx>eps)
       {
           midx=(lx+rx)/2.0;
           midmidx=(midx+rx)/2.0;
           if(checky(midx)<checky(midmidx))
              rx=midmidx;
           else lx=midx;
          // cout<<midx<<endl;
       }
       //cout<<midx<<endl;
       printf("%.4f\n",checky(midx));
    }
    return 0;
}
时间: 2024-10-25 16:04:16

Hdu 3694 Fermat Point in Quadrangle(三分)的相关文章

HDU 3694 Fermat Point in Quadrangle (费马定理求四边形的费马点)

题意:给你四个点,找出一个点到四个点的距离最小 四边形的费马点:凸边形是两对角线的交点,凹边形式凹点. PS: 三角形的费马点: 1.若三角形3个内角均小于120°,那么3条距离连线正好三等分费马点所在的周角,即该点所对三角形三边的张角相等,均为120°.所以三角形的费马点也称为三角形的等角中心. 2.若三角形有一内角大于等于120°,则此钝角的顶点就是距离和最小的点. #include<stdio.h> #include<string.h> #include<stdlib.

hdu3694 Fermat Point in Quadrangle 求四边形费马点

http://acm.hdu.edu.cn/showproblem.php?pid=3694 Fermat Point in Quadrangle Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 1973    Accepted Submission(s): 361 Problem Description In geometry the

HDU 4355 Party All the Time 三分

很长时间都是在学习各位大神的力作,并汲取了不少养料,在此一并谢过各位大神了. 当然了,好东西是要跟大家一起分享的,最近发现了几个非常不错的个人站点,都是介绍IOS开发的,其中有唐巧.破船之长.池建强.王维等各位,其中不乏供职于腾讯和阿里这样的IT巨头,希望大家也能从他们的博客中学习到一些技术之外的东西.就不再啰嗦啦,附上地址:http://www.ityran.com/archives/4647 这几天在学习IOS7 CookBook,因为没有找到中文版,就硬着头皮啃原著吧,还真学到了不少东西,

hdu 4717 The Moving Points(三分)

http://acm.hdu.edu.cn/showproblem.php?pid=4717 大致题意:给出每个点的坐标以及每个点移动的速度和方向.问在那一时刻点集中最远的距离在所有时刻的最远距离中最小. 比赛时一直以为是计算几何,和线段相交什么的有关.赛后队友说这是道三分,仔细想了想确实是三分,试着画画图发现它是一个凸性函数,存在一个最短距离.然后三分时间就可以了. #include <stdio.h> #include <iostream> #include <map&g

HDU 4355 Party All the Time 三分算法

HDU 4355 Party All the Time 三分算法 题意 给你N个人的位置x和相应重量w,他们要到达同一个位置p,他们每个人的花费的精力等于\(|s[i]-p|^{3}*w\),然后我们需要求一个位置,使得所有人的花费之和最小. 解题思路 根据上面的公式,我们可以知道这个函数不是一个简单的单调函数,最起码是个凹函数(这里需要一个数学上的知识),对于一般情况我们会使用二分法来进行处理,但是这里不是单调函数了,而是一个凹函数,这样我们就不能用二分了,新的算法应运而生--三分算法. 三分

hdu 3694 10 福州 现场 E - Fermat Point in Quadrangle

In geometry the Fermat point of a triangle, also called Torricelli point, is a point such that the total distance from the three vertices of the triangle to the point is the minimum. It is so named because this problem is first raised by Fermat in a

Fermat Point in Quadrangle(hdu 3694 求两直线交点

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3694 画几个图应该就可以知道凸四边形就是对角线交点 凹四边形就是凹进去的那个点 so 只要枚举四个点以及对角线交点 找个minn就可以 求两直线交点模板: double cross(double x1,double y1,double x2,double y2) { return x1*y2-x2*y1; } bool getcross(double x1,double y1,double x2,d

HDU 2440、HDU 3694多边形费马点

1.http://acm.hdu.edu.cn/showproblem.php?pid=2440   按照题意知道是一个简单的多边形即凸包,但给出的点并没有按照顺序的,所以需要自己先求出凸包,然后在用随机淬火求费马点. #include<iostream> #include<cstdio> #include<cstring> #include<string> #include<cmath> #include<cstdlib> #inc

hdu 2438 Turn the corner(三分)

Turn the corner                                                         Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 2010    Accepted Submission(s): 765 Problem Description Mr. West bought a