fork download
  1. #include <bits/stdc++.h>
  2. #include <float.h>
  3. using namespace std;
  4. int main(){
  5. double a,b,c,x,y,z,qqq=0,result=0;
  6. int T;
  7. scanf("%d",&T);
  8. for(int i=0;i<T;i++){
  9. scanf("%lf %lf %lf %lf %lf",&a,&b,&x,&y,&z);
  10. c=0;
  11. result = 0;
  12. qqq = 0;
  13. while(1){
  14. double dis,tim;
  15. if(qqq==0){
  16. qqq=1;
  17. dis = abs(c-b);
  18. tim = dis/(y+z);
  19. if(abs(a-b)/(x+y)<tim){
  20. printf("1\n");
  21. result += x*(abs(a-b)/(x+y));
  22. printf("%lf\n",result);
  23. break;
  24. }
  25. a+=x*tim;
  26. b-=y*tim;
  27. c+=z*tim;
  28. result+=z*tim;
  29. if(fabsf(a - b) <= FLT_EPSILON&&fabsf(b - c) <= FLT_EPSILON){printf("3\n%lf\n",result);break;}
  30. if(fabsf(z - y) <= FLT_EPSILON&&z<y){
  31. printf("2\n");
  32. dis = abs(a-b);
  33. tim = dis/(x+y);
  34. result += y*tim;
  35. printf("%lf\n",result);
  36. break;
  37. }
  38. }
  39. else{
  40. qqq=0;
  41. dis = abs(c-a);
  42. tim = dis/(x+z);
  43. if(abs(a-b)/(x+y)<tim){
  44. printf("2\n");
  45. result += y*(abs(a-b)/(x+y));
  46. printf("%lf\n",result);
  47. break;
  48. }
  49. a+=x*tim;
  50. b-=y*tim;
  51. c-=z*tim;
  52. result+=z*tim;
  53. if(fabsf(a - b) <= FLT_EPSILON&&fabsf(b - c) <= FLT_EPSILON){printf("3\n%lf\n",result);break;}
  54. if(fabsf(z - x) <= FLT_EPSILON&&z<x){
  55. printf("1\n");
  56. dis = abs(a-b);
  57. tim = dis/(x+y);
  58. result += x*tim;
  59. printf("%lf\n",result);
  60. break;
  61. }
  62. }
  63. }
  64. }
  65. }
  66.  
Success #stdin #stdout 0s 15240KB
stdin
2
-5 8
3 4 5
-4 8
4 5 1
stdout
3
9.285714
3
1.333333