# include iostream include vector include algorithm using namespace std

 ``` 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91``` ```#include #include #include using namespace std; double const E = 0.0000001; int const INF = 100000; double d; struct Point { double x; double y; double z; double Vx; double Vy; double Vz; }; vector q; double f(Point a, Point b,double t) { a.x += a.Vx*t; b.x += b.Vx*t; a.y += a.Vy*t; b.y += b.Vy*t; a.z += a.Vz*t; b.z += b.Vz*t; return max((a.x - b.x)*(a.x - b.x) + (a.y - b.y)*(a.y - b.y) + (a.z - b.z)*(a.z - b.z) , d ); } double tern(Point a, Point b) { double l = 0; double r = INF; while (r - l > E) { double ml = (r - l) / 3 + l; double mr = 2 * (r - l) / 3 + l; if ( f(a, b, ml) > f(a, b, mr) ) l = ml; else r = mr; } return l; } int main() { int n; cin >> n >> d; q.resize(n); vector > rez(3, vector (n, INF)); for (int i = 0; i < n; ++i) { cin >> q[i].x >> q[i].y >> q[i].z >> q[i].Vx >> q[i].Vy >> q[i].Vz; } vector c(3); for (int j = 0; j < n - 1; ++j) { for (int k = j + 1; k < n; ++k) { c[0] = tern(q[j], q[k]); if (c[0] != 0 && c[0] != INF && rez[0][j] > c[0]) { rez[0][j] = c[0]; rez[1][j] = j; rez[2][j] = k; } } } c[0] = INF; if (rez.size() == 0) cout << "OK" << endl; else { for (int i = 0; i < n; ++i) { if (rez[0][i] < c[0]) { c[0] = rez[0][i]; c[1] = rez[1][i]; c[2] = rez[2][i]; } } if (c[0] != INF) cout << "ALARM!" << endl << c[0] << " " << c[1] + 1 << " " << c[2] + 1 << endl; else cout << "OK" << endl; } return 0; } ```