Submission #1239342

#TimeUsernameProblemLanguageResultExecution timeMemory
1239342kaiboyPark (BOI16_park)C++20
100 / 100
85 ms16456 KiB
#include <algorithm> #include <iostream> #include <cmath> using namespace std; const int N = 2000; const int INF = 0x7fffffff; int xx[N + 1], yy[N + 1], rr[N + 1]; int ww[N + 2][N + 2], dd[N + 2]; int dijkstra(int n) { for (int i = 0; i < n; i++) dd[i] = INF; dd[0] = 0; for (int h = 0; h < n; h++) { int i = -1; for (int j = 0; j < n; j++) if (dd[j] != -1 && (i == -1 || dd[i] > dd[j])) i = j; int d = dd[i]; dd[i] = -1; if (i == n - 1) return d; for (int j = 0; j < n; j++) dd[j] = min(dd[j], max(d, ww[i][j])); } return -1; } int main() { ios_base::sync_with_stdio(false), cin.tie(NULL); int n, q; cin >> n >> q; int x_, y_; cin >> x_ >> y_; for (int i = 1; i <= n; i++) cin >> xx[i] >> yy[i] >> rr[i]; ww[0][n + 1] = min(x_, y_); for (int i = 1; i <= n; i++) for (int j = i + 1; j <= n; j++) ww[i][j] = ww[j][i] = (int) hypot(xx[j] - xx[i], yy[j] - yy[i]) - rr[i] - rr[j]; for (int i = 1; i <= n; i++) { ww[0][i] = ww[i][0] = yy[i] - rr[i]; ww[i][n + 1] = ww[n + 1][i] = min(min(xx[i], x_ - xx[i]), y_ - yy[i]) - rr[i]; } int d12 = dijkstra(n + 2); for (int i = 1; i <= n; i++) { ww[0][i] = ww[i][0] = min(yy[i], x_ - xx[i]) - rr[i]; ww[i][n + 1] = ww[n + 1][i] = min(xx[i], y_ - yy[i]) - rr[i]; } int d13 = dijkstra(n + 2); for (int i = 1; i <= n; i++) { ww[0][i] = ww[i][0] = xx[i] - rr[i]; ww[i][n + 1] = ww[n + 1][i] = min(min(yy[i], y_ - yy[i]), x_ - xx[i]) - rr[i]; } int d14 = dijkstra(n + 2); for (int i = 1; i <= n; i++) { ww[0][i] = ww[i][0] = x_ - xx[i] - rr[i]; ww[i][n + 1] = ww[n + 1][i] = min(min(yy[i], y_ - yy[i]), xx[i]) - rr[i]; } int d23 = dijkstra(n + 2); for (int i = 1; i <= n; i++) { ww[0][i] = ww[i][0] = min(xx[i], yy[i]) - rr[i]; ww[i][n + 1] = ww[n + 1][i] = min(x_ - xx[i], y_ - yy[i]) - rr[i]; } int d24 = dijkstra(n + 2); for (int i = 1; i <= n; i++) { ww[0][i] = ww[i][0] = y_ - yy[i] - rr[i]; ww[i][n + 1] = ww[n + 1][i] = min(min(xx[i], x_ - xx[i]), yy[i]) - rr[i]; } int d34 = dijkstra(n + 2); while (q--) { int d, a; cin >> d >> a, d *= 2; if (a == 1) { cout << 1; if (d12 >= d) cout << 2; if (d13 >= d) cout << 3; if (d14 >= d) cout << 4; } else if (a == 2) { if (d12 >= d) cout << 1; cout << 2; if (d23 >= d) cout << 3; if (d24 >= d) cout << 4; } else if (a == 3) { if (d13 >= d) cout << 1; if (d23 >= d) cout << 2; cout << 3; if (d34 >= d) cout << 4; } else { if (d14 >= d) cout << 1; if (d24 >= d) cout << 2; if (d34 >= d) cout << 3; cout << 4; } cout << '\n'; } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...