Advertisement
Gor1ch

160000

Jun 18th, 2019
93
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.53 KB | None | 0 0
  1. #include <iostream>
  2. #include <stdio.h>
  3. #include <vector>
  4. #include <cmath>
  5.  
  6. typedef long long iint;
  7. typedef long double ddouble;
  8.  
  9. using namespace std;
  10.  
  11. ddouble d;
  12. vector<ddouble> vcx(510), vcy(510), vcz(510),
  13. vcvx(510), vcvy(510), vcvz(510);
  14.  
  15. ddouble f(ddouble t, int i, int j) {
  16. ddouble x1 = vcx[i], x2 = vcx[j], y1 = vcy[i],
  17. y2 = vcy[j], z1 = vcz[i], z2 = vcz[j];
  18. x1 += (vcvx[i] * t);
  19. x2 += (vcvx[j] * t);
  20. y1 += (vcvy[i] * t);
  21. y2 += (vcvy[j] * t);
  22. z1 += (vcvz[i] * t);
  23. z2 += (vcvz[j] * t);
  24.  
  25. return ((x2 - x1) * (x2 - x1)) + ((y2 - y1) * (y2 - y1)) + ((z2 - z1) * (z2 - z1));
  26. }
  27.  
  28. int sltn() {
  29. bool flag = 1;
  30. int n;
  31. ddouble cord1, cord2, mint = 1e18;
  32. cin >> n >> d;
  33.  
  34. for (int i = 0; i < n; i++) {
  35. ddouble x, y, z, vx, vy, vz;
  36. cin >> x >> y >> z >> vx >> vy >> vz;
  37. vcx[i] = x; vcy[i] = y; vcz[i] = z;
  38. vcvx[i] = vx; vcvy[i] = vy; vcvz[i] = vz;
  39. }
  40.  
  41. for (int i = 0; i < n; i++) {
  42. for (int j = 0; j < n; j++) {
  43. if (i == j)
  44. continue;
  45. ddouble l = 0, r = 1e18;
  46. for (int k = 0; k < 200; k++) {
  47. ddouble m1 = l + ((r - l) / 3),
  48. m2 = r - ((r - l) / 3);
  49. if (f(m1, i, j) >= f(m2, i, j))
  50. l = m1;
  51. else
  52. r = m2;
  53. }
  54.  
  55. if (f(l, i, j) > d * d) continue;
  56. flag = 0;
  57.  
  58. ddouble left = 0, right = l, cnt = 0;
  59. while (cnt < 100) {
  60. cnt++;
  61. ddouble midd = (left + right) / 2,
  62. cur = f(midd, i, j);
  63. //cout << "cnt: " << cnt << ". midd: " << midd << '\n';
  64. if (d * d == cur) {
  65. if (midd < mint) {
  66. mint = midd;
  67. cord1 = i;
  68. cord2 = j;
  69. }
  70. }
  71. else {
  72. if (cur < d * d)
  73. right = midd;
  74. else
  75. left = midd;
  76. }
  77. }
  78. }
  79. }
  80.  
  81. if (flag)
  82. cout << "OK" << '\n';
  83. else
  84. cout << "ALARM!" << '\n' << mint << " " << cord1 + 1 << " " << cord2 + 1 << '\n';
  85.  
  86. return 0;
  87. }
  88.  
  89. int main() {
  90. //freopen("input.txt", "r", stdin);
  91. ios_base::sync_with_stdio(0);
  92. cin.tie(0); cout.tie(0);
  93. cout.precision(3);
  94.  
  95. return sltn();
  96. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement