hdu2175 两车追及或相遇问题

/...................................................................................................................................................................................................................................................................................................................\

貌似这个题在杭电上交的人数不太多哦,开始没想明白,想明白了原来是一个圆周追击与相遇问题,可以将题目中到达对面立即掉头理解为一个圆周运动,因为可以认为题目中连接2个城市的公路为双向车道,当考虑追击与相遇可以分开考虑,追击时候理解的路线图为
→→→→→→→→→→→→→→
↑ ↑→→→→→→→→→→→→↓ ↓      
↑ ↑                                          ↓ ↓               
↑ ↑←←←←←←←←←←←←↓ ↓     
←←←←←←←←←←←←←← 
        开始的时候可以A在左边,B在右边,则为一个距离为半个圆周的追击问题,圆周长为2倍的甲乙间距离当第一次追击 成功后便改变为距离为一个圆周的追击问题, 这个时候可以发现从第二次开始以后每次追击距离都是一个圆周,则追击周期为第一追击耗时的两倍, 从第一次求第二次乃至以后的N次都是增加这个周期就能得到               
        当寻找相遇时可以让车辆改变行驶的车道,因为刚才图中依然能够理解到相遇,即对面行驶不同车道相遇,改变车道对追击与相遇不产生影响,但便于理解
→→→→→→→→→→→→→→
↑ ↓←←←←←←←←←←←←↑ ↓               
↑ ↓                                          ↑ ↓       
↑ ↓→→→→→→→→→→→→↑ ↓
←←←←←←←←←←←←←←
       该图表示时可以理解为一个距离为半个圆周的相遇问题,当第一次相遇后可以改变为距离为一个圆周的相遇问题,此时跟上述原理一样,从第一次求第二次开始每次增加第一次耗时的两倍,按照周期则可求得N次相遇的时间
       追击与相遇的分别的第N次时间已经可求,那给定总的第N次时间和最短距离便能搞定了

\.................................................................................................................................................................................................................................................................................................................../




#include

int main()
 {
      int a,n,i;
      double v1,v2,time1,time2,t1,t2,l1,l2,min,s;
      scanf("%d",&n);
      while(n--)
      {
          scanf("%lf%lf%lf%d",&s,&v1,&v2,&a);
          time1=s/(v1+v2);
          if(v1>v2)
          time2=s/(v1-v2);
          else if(v1=s*2)l1-=2*s;
          if(l1>=s)l1=2*s-l1;
          l2=s-l1;
          if(l2


你可能感兴趣的:(数学)