제출 #343202

#제출 시각아이디문제언어결과실행 시간메모리
343202apostoldaniel854Experiments with Gorlum (IZhO13_expgorl)C++14
0 / 100
1 ms512 KiB
#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 lb = 0, rb = k - 1, best = 0; while (lb < rb) { int mid = (lb + rb) / 2; int px = p.first + mid * x; int py = p.second + mid * y; if (dist (px, py) >= dist (px + x, py + y)) { lb = mid + 1; best = mid; } else { rb = mid; } } 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 timeMemoryGrader output
Fetching results...