Submission #343203

# Submission time Handle Problem Language Result Execution time Memory
343203 2021-01-03T14:20:32 Z apostoldaniel854 Experiments with Gorlum (IZhO13_expgorl) C++14
0 / 100
1 ms 364 KB
#include <bits/stdc++.h>

using namespace std;

#define pb push_back
#define dbg(x) cerr << #x << " " << x << "\n"
using ll = long long;

int k;

ll ans_max, ans_min;
void upd (ll val) {
    if (ans_max < val)
        ans_max = val;
    if (ans_min > val)
        ans_min = val;
}

ll dist (int x, int y) {
    return 1ll * x * x + 1ll * y * y;
}

int main () {
    ios::sync_with_stdio (false);
    cin.tie (0); cout.tie (0);

    cin >> k;
    string moves;
    cin >> moves;
    int laser_x, laser_y, gorlum_x, gorlum_y;
    cin >> laser_x >> laser_y;
    cin >> gorlum_x >> gorlum_y;
    gorlum_x -= laser_x;
    gorlum_y -= laser_y;
    vector <pair <int, int>> points;
    int x = 0, y = 0;
    points.pb ({gorlum_x, gorlum_y});
    for (char ch : moves) {
        if (ch == 'L')
            x--;
        if (ch == 'R')
            x++;
        if (ch == 'F')
            y++;
        if (ch == 'B')
            y--;
        points.pb ({x + gorlum_x, y + gorlum_y});
    }
    ans_max = ans_min = dist (gorlum_x, gorlum_y);
    for (pair <int, int> p : points) {
        upd (dist (p.first, p.second));
        upd (dist (p.first + (k - 1) * x, p.second + (k - 1) * y));
        int best = -1;
        for (int step = (1 << 20); step > 0; step /= 2) {
            if (best + step < k) {
                int px = p.first + best * x;
                int py = p.second + best * y;
                if (dist (px, py) >= dist (px + step * x, py + step * y))
                    best += step;
            }
        }
        upd (dist (p.first + best * x, p.second + best * y));
    }
    cout << fixed << setprecision (9) << sqrt (ans_min) << " " << sqrt (ans_max) << "\n";
    return 0;
}
# Verdict Execution time Memory Grader output
1 Incorrect 1 ms 364 KB Output isn't correct
2 Halted 0 ms 0 KB -