fork(1) download
  1. #include <cmath>
  2. #include <stdio.h>
  3.  
  4. using namespace std;
  5.  
  6. int main()
  7. {
  8. int ile;
  9. int x1,y1,r1;
  10. int x2,y2,r2;
  11. int rw,rm;
  12. double wynik;
  13.  
  14. scanf("%d",&ile);
  15. for(int i=0; i<ile; i++)
  16. {
  17. scanf("%d%d%d",&x1,&y1,&r1);
  18. scanf("%d%d%d",&x2,&y2,&r2);
  19.  
  20. //przesuniecie ukladu wsp do punktu x1,y1
  21. x2-=x1;
  22. y2-=y1;
  23.  
  24. //wyznaczenie wiekszego kola
  25. rw=r1;
  26. rm=r2;
  27. if(r2>r1)
  28. {
  29. rw=r2;
  30. rm=r1;
  31. }
  32.  
  33. //kola maja wspolny srodek
  34. if(x2==0 && y2==0)
  35. {
  36. printf("%.2f\n",2.0*rm);
  37. continue;
  38. }
  39.  
  40. //okregi zachodza na siebie calkowicie
  41. if(x2*x2+y2*y2<=(rw-rm)*(rw-rm))
  42. {
  43. printf("%.2f\n",2.0*rm);
  44. continue;
  45. }
  46.  
  47.  
  48. //okregi maja czesc wspolna
  49. if(((x2*x2)+(y2*y2)>(rw-rm)*(rw-rm))&&((x2*x2)+(y2*y2)<(rw+rm)*(rw+rm)))
  50. {
  51. wynik=rw+rm-sqrt((x2*x2)+(y2*y2));
  52. printf("%.2f\n",wynik);
  53. continue;
  54. }
  55.  
  56. //okregi leza obok siebie
  57. if(x2*x2+y2*y2>=(r1+r2)*(r1+r2))
  58. {
  59. printf("%.2f\n",0.0);
  60. continue;
  61. }
  62. }
  63. return 0;
  64. }
Success #stdin #stdout 0s 15240KB
stdin
6
3 3 3
3 -1 4
-3 -3 3
-1 2 5
3 3 2
-3 -3 1
5 5 10
13 5 4
10 5 2
5 10 3
0 0 10
1 1 100
stdout
3.00
2.61
0.00
6.00
0.00
20.00