您的位置:首页 > 其它

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

2017-01-22 08:23 183 查看

题目描述

【题目背景】

  话说星矢、紫龙、冰河、阿瞬为了救活雅典娜,必须勇闯黄金十二宫。

【问题描述】

  第六个他们来到处女宫,身为处女座黄金圣斗士的沙加被称为最接近神的人,也就是说,他是最厉害的黄金圣斗士。不过他并不知道教皇是假的,星矢等人和他展开了决斗。沙加的眼睛一直是闭着的,而且很轻松就打败了他们四人。不过后来,阿瞬的哥哥一辉赶到救了他们,并且和沙加单挑。一辉很厉害,迫使沙加张开了眼睛,并且使出了绝招“天舞宝轮”,这一绝招十分强悍,可以封人的六感。一辉为了不被沙加击中,便往相反方向逃跑。 由于体力问题,一辉的速度为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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息