国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發(fā)設(shè)計 > 正文

ICPCCamp2017 Day 4 F Factory(三分套三分)

2019-11-08 18:28:33
字體:
供稿:網(wǎng)友

大體題意:

給你二維坐標面上n個點,讓你求出一個點,到這n個點的距離和最小?

思路:

賽后才想出怎么做來= =

寫一寫表達式:

sqrt((x0-x1)^2 + (y0-y1)^2 ) + sqrt((x0-x2)^2 + (y0-y2)^2 ) + sqrt((x0-x3)^2 + (y0-y3)^2 ) ....

觀察發(fā)現(xiàn),x0是一個凹凸函數(shù)(二次函數(shù))關(guān)系,y0也是一個凹凸函數(shù)(二次函數(shù))關(guān)系,  加起來還是一個二次函數(shù)關(guān)系(凹凸函數(shù))。

那么兩個未知量,都是凹凸性,直接三分x中在三分y即可。

#include <cstdio>#include <cstring>#include <algorithm>#include <cmath>#define sqr(x) ((x)*(x))using namespace std;const double eps = 1e-10;int n, T;int dcmp(double a,double b){    if (fabs(a-b) < eps) return 0;    if (a < b) return -1;    return 1;}struct Node{    double x,y;    void read(){        scanf("%lf %lf",&x, &y);    }}p[1007];double judge(double x,double y){    double sum = 0;    for (int i = 0; i < n; ++i){        double xx = p[i].x;        double yy = p[i].y;        sum += sqrt(sqr(x-xx) + sqr(y-yy));    }    return sum;}const int oo = 1e6+7;int main(){    scanf("%d",&T);    while(T--){        scanf("%d",&n);        for (int i = 0; i < n; ++i) p[i].read();        double lx = -oo, rx = oo;        double ly = -oo, ry = oo;        for (int i = 0; i < 100; ++i){            ly = -oo, ry = oo;            double mx1 = (rx+lx) / 2;            double mx2 = (mx1 + rx) / 2;            for (int j = 0; j < 100; ++j){                double my1 = (ly + ry) / 2;                double my2 = (my1 + ry) / 2;                double t1 = judge(mx1,my1);                double t2 = judge(mx1,my2);                if (dcmp(t1,t2) == -1) ry = my2;                else ly = my1;            }            double ny1 = (ly+ry) / 2;            ly = -oo, ry = oo;            for (int j = 0; j < 100; ++j){                double my1 = (ly + ry) / 2;                double my2 = (my1 + ry) / 2;                double t1 = judge(mx2,my1);                double t2 = judge(mx2,my2);                if (dcmp(t1,t2) == -1) ry = my2;                else ly = my1;            }            double ny2 = (ly+ry) / 2;            double nt1 = judge(mx1,ny1), nt2 = judge(mx2,ny2);            if (dcmp(nt1,nt2) == -1) rx = mx2;            else lx = mx1;        }        PRintf("%.10f %.10f/n",(lx+rx)/2,(ly+ry)/2);    }    return 0;}/**13-3 00 33 0**/


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 景宁| 连平县| 镶黄旗| 南皮县| 清水县| 栾城县| 大新县| 毕节市| 塔河县| 随州市| 新津县| 开远市| 张家界市| 敦化市| 永安市| 吴忠市| 三穗县| 新兴县| 登封市| 方城县| 尉氏县| 遂宁市| 翼城县| 德庆县| 堆龙德庆县| 鹤峰县| 武冈市| 丹江口市| 屏山县| 连南| 弥渡县| 邛崃市| 灵宝市| 平安县| 汉中市| 昔阳县| 杭州市| 建瓯市| 凤冈县| 呈贡县| 库尔勒市|