#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 |
- |