Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <stdio.h>
- #include <vector>
- #include <cmath>
- typedef long long iint;
- typedef long double ddouble;
- using namespace std;
- ddouble d;
- vector<ddouble> vcx(510), vcy(510), vcz(510),
- vcvx(510), vcvy(510), vcvz(510);
- ddouble f(ddouble t, int i, int j) {
- ddouble x1 = vcx[i], x2 = vcx[j], y1 = vcy[i],
- y2 = vcy[j], z1 = vcz[i], z2 = vcz[j];
- x1 += (vcvx[i] * t);
- x2 += (vcvx[j] * t);
- y1 += (vcvy[i] * t);
- y2 += (vcvy[j] * t);
- z1 += (vcvz[i] * t);
- z2 += (vcvz[j] * t);
- return ((x2 - x1) * (x2 - x1)) + ((y2 - y1) * (y2 - y1)) + ((z2 - z1) * (z2 - z1));
- }
- int sltn() {
- bool flag = 1;
- int n;
- ddouble cord1, cord2, mint = 1e18;
- cin >> n >> d;
- for (int i = 0; i < n; i++) {
- ddouble x, y, z, vx, vy, vz;
- cin >> x >> y >> z >> vx >> vy >> vz;
- vcx[i] = x; vcy[i] = y; vcz[i] = z;
- vcvx[i] = vx; vcvy[i] = vy; vcvz[i] = vz;
- }
- for (int i = 0; i < n; i++) {
- for (int j = 0; j < n; j++) {
- if (i == j)
- continue;
- ddouble l = 0, r = 1e18;
- for (int k = 0; k < 200; k++) {
- ddouble m1 = l + ((r - l) / 3),
- m2 = r - ((r - l) / 3);
- if (f(m1, i, j) >= f(m2, i, j))
- l = m1;
- else
- r = m2;
- }
- if (f(l, i, j) > d * d) continue;
- flag = 0;
- ddouble left = 0, right = l, cnt = 0;
- while (cnt < 100) {
- cnt++;
- ddouble midd = (left + right) / 2,
- cur = f(midd, i, j);
- //cout << "cnt: " << cnt << ". midd: " << midd << '\n';
- if (d * d == cur) {
- if (midd < mint) {
- mint = midd;
- cord1 = i;
- cord2 = j;
- }
- }
- else {
- if (cur < d * d)
- right = midd;
- else
- left = midd;
- }
- }
- }
- }
- if (flag)
- cout << "OK" << '\n';
- else
- cout << "ALARM!" << '\n' << mint << " " << cord1 + 1 << " " << cord2 + 1 << '\n';
- return 0;
- }
- int main() {
- //freopen("input.txt", "r", stdin);
- ios_base::sync_with_stdio(0);
- cin.tie(0); cout.tie(0);
- cout.precision(3);
- return sltn();
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement