问题 E(1155): 小车问题
时间限制: 1 Sec
内存限制: 64 MB
问题 E(1155): 小车问题
题目描述
输入
输出
样例输入
120 5 25
样例输出
9.6000
设v1=v人,v2=v车
由此可得 :
T甲1 = T乙1= S'/v2;
S乙1 = S'*v1/v2;
-----------------------------------------
T乙2 = (S'-S乙1)/(v1+v2)
= (S'-S'*v1/v2)/(v1+v2)= S'*(v2-v1)/v2*(v1+v2);
S乙2 = T乙2*v1
= S'*v1*(v2-v1)/[v2*(v1+v2)];
S乙1+S乙2 =S'*v1*(v2-v1)/[v2*(v1+v2)]+S'*v1/v2
= 2*S'*v1/(v1+v2);
T乙1+T乙2 = 2*S'/(v1+v2);
----------------------------------------
S乙3 = S-(S乙1+S乙2)
= [S*(v1+v2)-2*S'v1]/(v1+v2);
T乙3 = S乙3/v2
=[s*(v1+v2)-2*S'v1]/[v2*(v1+v2)];
T甲2+T甲3 = (S-S')/v1;
故:
T甲总 = S'/v2+(S-S')/v1;
T乙总 = T乙1+T乙2+T乙3
= [2*S'*(v2-v1)+S*(v1+v2)]/[v2*(v1+v2)];
<pre name="code" class="cpp">#include<cstdio>
#include<iostream>
#include<cstring>
#include<cmath>
#include<cstdlib>
#include<algorithm>
#include<queue>
using namespace std;
#define MAXN 100
#define MAXM
#define LL long long
#define INF 0x3f3f3f3f
double S,v1,v2;
int main()
{
scanf("%lf%lf%lf",&S,&v1,&v2);
double l=0,r=S,mid,t1,t2;
while(r-l>=0.0001)
{
mid=(l+r)/2;
t1=mid/v2+(S-mid)/v1;
t2=(2*mid*(v2-v1)+S*(v1+v2))/(v2*(v1+v2));
if(t1>t2)l=mid;
else r=mid;
}
printf("%0.4lf\n",l/v2+(S-l)/v1);
}
又根据T甲=T乙
可列方程:
S'/v2+(S-S')/v1= [2*S'*(v2-v1)+S*(v1+v2)]/[v2*(v1+v2)];
解得:
S'=S*(v2*v2-v1*v1)/(2*v1*v2-3*v1*v1+v2*v2);
T= S'/v2+(S-S')/v1;
下附代码:
<pre name="code" class="cpp">#include<cstdio>
#include<iostream>
#include<cstring>
#include<cmath>
#include<cstdlib>
#include<algorithm>
#include<queue>
using namespace std;
#define MAXN 100
#define MAXM
#define LL long long
#define INF 0x3f3f3f3f
double S,v1,v2;
int main()
{
scanf("%lf%lf%lf",&S,&v1,&v2);
double stmp=S*(v2*v2-v1*v1)/(2*v1*v2-3*v1*v1+v2*v2);
printf("%0.4lf\n",stmp/v2+(S-stmp)/v1);
}
这两种方法码完后人都不好了,尤其是公式推错了好几次。。。数学不好是硬伤啊。