zoukankan      html  css  js  c++  java
  • Evanyou Blog 彩带

      题目传送门

    传送带

    题目描述

    在一个2维平面上有两条传送带,每一条传送带可以看成是一条线段。两条传送带分别为线段AB和线段CD。lxhgww在AB上的移动速度为P,在CD上的移动速度为Q,在平面上的移动速度R。现在lxhgww想从A点走到D点,他想知道最少需要走多长时间

    输入输出格式

    输入格式:

     

    输入数据第一行是4个整数,表示A和B的坐标,分别为Ax,Ay,Bx,By

    第二行是4个整数,表示C和D的坐标,分别为Cx,Cy,Dx,Dy

    第三行是3个整数,分别是P,Q,R

     

    输出格式:

     

    输出数据为一行,表示lxhgww从A点走到D点的最短时间,保留到小数点后2位

     

    输入输出样例

    输入样例#1: 
    0 0 0 100
    100 0 100 100
    2 2 1
    
    输出样例#1: 
    136.60

    说明

    对于100%的数据,1<= Ax,Ay,Bx,By,Cx,Cy,Dx,Dy<=1000,1<=P,Q,R<=10


      分析:

      如果会三分算法的话,这题就很显然了。但是考的时候蒟蒻并没有学,于是弃疗,然后输出了样例,结果最后代码忘了蒯上去,然后呵呵。

      思路很简单,先三分线段AB上的点,在三分线段CD上的点,然后求出移动时间,就这么进行。就这样,三分套三分(难道这就是传说中的九分???(并不是))STO%%%神佬太巨了,竟然想到用向量水分。。。STO%%%five20太巨了可以用模拟退火A掉。。。

      Code:

    #include<bits/stdc++.h>
    using namespace std;
    const double eps=1e-7;
    int n;
    double l,r,ans,a[15];
    double fun(double x)
    {
        double ret=a[1];
        for(int i=1;i<=n;i++)
        ret=ret*x+a[i+1];
        return ret;
    }
    int main()
    {
        scanf("%d%lf%lf",&n,&l,&r);
        for(int i=1;i<=n+1;i++)
        scanf("%lf",&a[i]);
        while(555){
            double mid=(l+r)/2;
            double remid=(mid+r)/2;
            double ans1=fun(mid);
            double ans2=fun(remid);
            if(ans1<ans2)l=mid+0.000001,ans=mid;
            else r=remid-0.000001,ans=remid;
            if(r-l<=eps)break;
        }
        printf("%.5lf",ans);
        return 0;
    }
  • 相关阅读:
    计算素数。
    两个div在一行中显示
    html文本太长显示为省略号的方法
    .net remoting实例
    C#核心基础--静态类&部分类
    C#核心基础--类的继承
    c#核心基础--类的构造方法
    C#核心基础--类的声明
    C#核心基础--浅谈类和对象的概念
    c#学习之旅------01
  • 原文地址:https://www.cnblogs.com/cytus/p/9320529.html
Copyright © 2011-2022 走看看