[勇闯黄金十二宫] 处女宫


题目描述

【题目背景】
  话说星矢、紫龙、冰河、阿瞬为了救活雅典娜,必须勇闯黄金十二宫。
【问题描述】
  第六个他们来到处女宫,身为处女座黄金圣斗士的沙加被称为最接近神的人,也就是说,他是最厉害的黄金圣斗士。不过他并不知道教皇是假的,星矢等人和他展开了决斗。沙加的眼睛一直是闭着的,而且很轻松就打败了他们四人。不过后来,阿瞬的哥哥一辉赶到救了他们,并且和沙加单挑。一辉很厉害,迫使沙加张开了眼睛,并且使出了绝招“天舞宝轮”,这一绝招十分强悍,可以封人的六感。一辉为了不被沙加击中,便往相反方向逃跑。 由于体力问题,一辉的速度为v1=at(a是自变量,t是时间),和沙加发“天舞宝轮”的速度v2=t^2,但是,由于一辉有预知,所以k秒前就已经开始逃跑。显然这两个运动是变速运动,每个运动的t均以运动开始作为0秒(所以两个t的意义不同)。“天舞宝轮”虽然强,但有时间限制,即一定时间后就消失,所以你就得计算一下理论上“天舞宝轮”追上一辉要多少秒(这里以一辉开始逃跑为0时间计时,假设均为直线运动) 后来,一辉虽然被封了六感,但他发挥了第七感的小宇宙。和沙加同归于今了。(后来两人又在白羊座穆先生的帮助下复活了。)


输入格式

本题包含多组数据. 每组数据一行,为实数a和k, a,k都大于零。


输出格式

对于每组数据输出一行,为“天舞宝轮”追上一辉要多少秒,即求追上时的t,保留4位小数。(保证有解,且结果小于1e+10)


样例数据

样例输入

1 1

样例输出

3.7756


题目分析

积分练习题目
对v1积分得1/2*a*t^2,对v2积分得(t-k)^3/3。
令f(x)=(∫v1-v2)|t=x=1/2*a*x*x-(x-k)^3/3
对f(x)取导2*(t-k)^3-3at-6akt-3ak^2
观察发现单调,二分取答案
精度要求较高,用long double


源代码

#include<algorithm>
#include<iostream>
#include<iomanip>
#include<cstring>
#include<cstdlib>
#include<vector>
#include<cstdio>
#include<cmath>
#include<queue>
using namespace std;
inline const int Get_Int() {
    int num=0,bj=1;
    char x=getchar();
    while(x<'0'||x>'9') {
        if(x=='-')bj=-1;
        x=getchar();
    }
    while(x>='0'&&x<='9') {
        num=num*10+x-'0';
        x=getchar();
    }
    return num*bj;
}
long double f(long double t,long double a,long double k) {
    t-=k;
    return 2*t*t*t-3*a*t*t-6*a*k*t-3*a*k*k;
}
long double a,k;
int main() {
    ios::sync_with_stdio(false);
    while(cin>>a>>k) {
        long double Left=0,Right=1e07;
        while(Right-Left>1e-10) {
            long double mid=(Left+Right)/2;
            if(f(mid,a,k)*f(Left,a,k)<0)Right=mid;
            else Left=mid;
        }
        cout<<fixed<<setprecision(4)<<Left<<endl;
    } 
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值