zoukankan      html  css  js  c++  java
  • NKOJ2044

    此题同样可以在洛谷P2571看到。

    解题过程

    这题通过思考,可以看出这是一个三分套三分的题,代码比较难啃(反正我啃了很久)

    #include<bits/stdc++.h>
    using namespace std;
    double ax,ay,bx,by;
    double cx,cy,dx,dy;
    double p,q,r;
    double dian(double x,double y,double xx,double yy){
    	return sqrt((x-xx)*(x-xx)+(y-yy)*(y-yy));
    }
    double f(double x,double y)
    {
    	double lx = cx,ly = cy,rx = dx,ry = dy;
        while(fabs(rx - lx) > 1e-10 || fabs(ry - ly) > 1e-10)
        {
            double m1x = (2 * lx + rx) / 3,m2x = (lx + 2 * rx) / 3,m1y = (2 * ly + ry) / 3,m2y = (ly + 2 * ry) / 3;
            double a1 = dian(ax,ay,x,y) / p + dian(x,y,m1x,m1y) / r + dian(m1x,m1y,dx,dy) / q;
            double a2 = dian(ax,ay,x,y) / p + dian(x,y,m2x,m2y) / r + dian(m2x,m2y,dx,dy) / q;
            if(a1 > a2)lx = m1x,ly = m1y;
            else rx = m2x,ry = m2y;
        }
        return dian(ax,ay,x,y) / p + dian(x,y,lx,ly) / r + dian(lx,ly,dx,dy) / q;
    }
    double solve()
    {
        double lx = ax,ly = ay,rx = bx,ry = by;
        while(fabs(rx - lx) > 1e-10 || fabs(ry - ly) > 1e-10)
        {
            double m1x = (2 * lx + rx) / 3,m2x = (lx + 2 * rx) / 3,m1y = (2 * ly + ry) / 3,m2y = (ly + 2 * ry) / 3;
            if(f(m1x,m1y) < f(m2x,m2y))rx = m2x,ry = m2y;
            else lx = m1x,ly = m1y;
        }
        return f(lx,ly);
    }
    int main()
    {
    	cin >> ax >> ay >> bx >> by >> cx >> cy >> dx >> dy;
        cin >> p >> q >> r;
    	printf("%.2lf",solve());
    	return 0;
    }
    

    本题到这就结束了,关于三分的知识请自行百度。

  • 相关阅读:
    最终版需求分析
    第九次会议
    第八次会议
    软工测试文档
    软工第七次会议记录
    第六次会议
    软件工程第二次和第三次会议
    Java环境搭建与概述
    [JavaWeb] Ajax&JQuery
    [JavaWeb] JSP
  • 原文地址:https://www.cnblogs.com/zzx-0826/p/12969378.html
Copyright © 2011-2022 走看看