HDU-1275-两车追及或相遇问题(数学题目)
题目链接
http://acm.hdu.edu.cn/showproblem.php?pid=1275
这题是一个数学题目,知道两个公式那就好办了;
对头相遇时:time*(v1+v2)=d*(2*i-1)
追击相遇时:time*(fabs(v1-v2))= d*(2*i-1)
这两个公式是这题的难点!其他一切好说。
#include<stdio.h>
#include<math.h>
#define esp 1e-10
double time[2000];
int main(void)
{
    int t,n,i,j,k;
    double d,v1,v2,f,dist,p,q;
    scanf("%d",&t);
    while(t--)
    {
        scanf("%lf%lf%lf%d",&d,&v1,&v2,&n);
        q=999999999;//为了以防f==0即v1==v2时那种情况;
        j=k=1;
        f=fabs(v1-v2);
        for(i=1;i<=n;i++)
        {
            p=((2*j-1)*d)/(v1+v2);
            if(f>esp)
            {
                q=((2*k-1)*d)/f;
            }
            if(p<q)
            {
                time[i]=p;
                j++;
            }
            else
            {
                time[i]=q;
                k++;
            }
        }
        dist=time[n]*v1;
        while(dist>=d)
        {
            dist=dist-d;
        }
        printf("Time=%.3lf Dist=%.3lf\n",time[n],dist<d-dist?dist:d-dist);
    }
    return 0;
}
 
                    
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号