儿童节校内测T1 逃亡

【题目描述】逃亡(escape.cpp/c/pas)

邪狼紧张地说:“老大,警察快追过来了,我们快逃跑吧!”

修罗王傲然道:“在我的字典里没有逃跑……”

邪狼内心崇敬地想:“老大实在是太有领袖范了……”

修罗王接着说:“只有战略转移。”

邪狼:“……”

现在,修罗王和邪狼两人需要从A地出发尽快到达B地。出发时A地有一辆可带一人的自动驾驶悬浮车。又知两人步行速度相同。问怎样利用小车才能使两人尽快同时到达B地。

【输入格式】

输入文件为escape.in,有三个int类型整数,分别表示A、B两地的距离,步行速度和车速。

【输出格式】

输出文件为escape.out,有一个小数位数为2的浮点数,即最短时间。

【输入样例】

100 5 10

【输出样例】

14.00


QAQ

这是6月1号校内分治测的T1

这题就这点格局?

很明显我们要用二分查找

这应该是一道暴力模拟题

让我们先分析一下这道题

应该是典型的同时到达问题(小学奥数杀我

众所周知小学奥数题应该都有固定解法

于是我上网搜严谨地推导了一下

解出了这道题的公式

那我们再来推导一遍

(有人刚刚提到二分了吗(大雾


由题意可知

开局会给出三个已知量

分别是路程s,步行速度a和汽车速度b

你们这些虐暴小学奥数的巨佬们应该都已经想到了

应该是先用车把一个人(姑且叫他甲吧)从出发点带到路程中的某一点

同时另一个人(那就叫他乙)向着终点步行

然后把甲放下来步行

悬浮车调头回去接乙

接上乙之后再调头向终点前进

最后甲乙二人同时到达终点

(没理解,难道我说的不是很明白了!?,那可能我说的不够明白,希望宁可以悟一悟)

反正这题最关键的除了内俩人就是中间的这个折返点(姑且叫做Q叭)

把这条路程看成数轴

两人出发的点A设为原点

设甲到Q前的用时为t1

Q到终点的用时为t2

则将t2作为定量列方程有

(s-q)/a=2*(2*q/(a+b)-q/b)+(s-q)/b=t2

(s-q)/a很好理解,就是甲下车后步行的路程除以步行的速度

我们再来分析这个式子

2*(2*q/(a+b)-q/b)+(s-q)/b

后一项(s-1)/b表示的是乙从Q到终点所花的时间

乙在Q点到终点的这一段距离是已经坐着车的了

2*(2*q/(a+b)-q/b)则表示悬浮车从Q点调头以后与乙汇合的时间再加上从汇合以后重新回到Q的时间

于是可以解得关于点Q在数轴上的坐标

q=(b+a)*s/(b+3a)

现在已经知道了Q的坐标

则以甲为参照

Q之前的时间为(q/b)

Q之后的时间为(s-q)/a

相加即为所求(甲乙同时到达,所以可以只求一个,显然甲更好求)

AC代码如下

 1 #include<iostream>
 2 #include<cstdio>
 3 int main()
 4 {
 5     long long s,a,b;
 6     double q;
 7     scanf("%d%d%d",&s,&a,&b);
 8     q=(b+a)*s/(b+3*a);
 9     printf("%.2lf\n",q/b+(s-q)/a);
10     return 0;
11 }
12 //是不是很短QwQ

话说这题也可以用分治

而且我谷好像也有原题来着

P1258 小车问题

https://www.luogu.com.cn/problem/P1258

不过它的位数是6位

和分治的差距会比较大

所以不推荐使用数学方法求解...


END

 

 

 

 

posted @ 2020-06-01 17:34  JiangXingchen  阅读(225)  评论(0编辑  收藏  举报
Live2D