题目描述
【题目背景】
在HNSDFZ的信息组里,Vivian Snow、Charles和Sunnypig之间有着一种奇怪的债务关系:Vivian Snow欠了Charles一百块钱,Charles欠了Sunnypig一百块钱,Sunnypig欠了Vivian Snow一百块钱。
【问题描述】
一天,三个人遇到了一起。由于他们都不够理智,一心想要回自己借出去的钱,于是互相之间追逐起来。最初,三个人分别站在一个边长为L正三角形的三个顶点上。某一个时刻,三个人同时开始以速度V匀速运动。他们运动的方向是这样的:每一个时刻,Vivian Snow运动的方向指向Sunnypig,Sunnypig运动的方向指向Charles,Charles运动的方向指向Vivian Snow,总之,每一个时刻,三个人都在尽快的接近各自欠自己债的人。最终,三个人都到达了同一个点上,并且通过和谈的方式解决了这一冲突。
Xiaomengxian知道此事后,想写一篇报道,宣传这件事情。他想知道每个人走的路程的长度S,以及他们到达同一个点所需要的时间T。
输入格式
输入文件有两行。
第一行为一个实数L(0<=L<=1E100)。
第二行为一个实数V(0<=V<=1E100)。
输出格式
输出文件有两行。
第一行为一个实数S,保留一位小数。
第二行为一个实数T,保留一位小数。
样例数据
样例输入
13.05
0.56
样例输出
8.7
15.5
说明
所有单位均为国际标准单位。
Just For Fun :)
题目分析
三个人的运动路径如下图所示(图画的丑见谅)。
对于每一个时刻,每个人的运动方向都沿着两人间的连线方向,大小为v,这样,在指向等边三角形中心方向上有一个分速度v’,大小为v在指向中心方向上的正投影大小,v’=v*cos30°。同理每个人在指向中心方向上的位移l’=l*(√3)/3,两者相除得t=(2/3)*(l/v)。由于运动的等时性,总路程为
s=t*v=(2/3)*l。
源代码
#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;
}
double l,v;
int main() {
scanf("%lf%lf",&l,&v);
printf("%0.1lf\n",2*l/3);
printf("%0.1lf\n",2*l/(3*v));
return 0;
}