思路:这里有2种情况:
一种是相遇:满足关系是 (va+vb)*t=L*(2*n-1)
一种是追及: 满足关系是 |va-vb|*t=L*(2*n-1)
这样求出2种情况的时间,在排序就可以了……
链接:http://acm.hdu.edu.cn/showproblem.php?pid=1275
#include<iostream>
#include<stdio.h>
#include<algorithm>
#include<iomanip>
#include<cmath>
#include<string>
using namespace std;
double ans[2001];
int main()
{
int n,num,m,ia,ib,i,j;
double len,va,vb,dis;
cin>>m;
while(m--)
{
cin>>len>>va>>vb>>num;
j=1;
for(i=1;i<=1000;i++)
{
ans[j++]=(2*i-1)*len/(va+vb);
ans[j++]=(2*i-1)*len/fabs(va-vb);
}
sort(ans,ans+j);
dis=ans[num]*va;
while(dis-len>0) dis-=len;
if(len-dis<dis) dis=len-dis;
printf("Time=%.3lf Dist=%.3lf
",ans[num],dis);
}
return 0;
}