Submission #831261

#TimeUsernameProblemLanguageResultExecution timeMemory
831261pavementCell Automaton (JOI23_cell)C++17
16 / 100
2485 ms511324 KiB
#include <bits/stdc++.h> using namespace std; using ii = pair<int, int>; const int D = 2000; int N, Q, X[100005], Y[100005], dist[4 * D + 5][4 * D + 5], dr[] = {-1, -1, -1, 0, 0, 1, 1, 1}, dc[] = {-1, 0, 1, -1, 1, -1, 0, 1}, ans[4000005]; queue<ii> qu; int main() { ios::sync_with_stdio(0); cin.tie(0); cin >> N >> Q; for (int i = 1; i <= N; i++) { cin >> X[i] >> Y[i]; int p = X[i] + Y[i], q = X[i] - Y[i]; X[i] = p; Y[i] = q; X[i] += 2 * D; Y[i] += 2 * D; } for (int i = 0; i <= 4 * D; i++) { for (int j = 0; j <= 4 * D; j++) { dist[i][j] = (int)1e9; } } for (int i = 1; i <= N; i++) { dist[X[i]][Y[i]] = 0; qu.emplace(X[i], Y[i]); } while (!qu.empty()) { auto [r, c] = qu.front(); qu.pop(); for (int k = 0; k < 8; k++) { int nr = r + dr[k], nc = c + dc[k]; if (0 <= nr && nr <= 4 * D && 0 <= nc && nc <= 4 * D) { if (dist[nr][nc] > dist[r][c] + 1) { dist[nr][nc] = dist[r][c] + 1; qu.emplace(nr, nc); } } } } for (int i = 0; i <= 4 * D; i++) { for (int j = 0; j <= 4 * D; j++) { if ((i + j) % 2 == 0) { ans[dist[i][j]]++; } } } for (int i = 1, t; i <= Q; i++) { cin >> t; cout << ans[t] << '\n'; } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...