Submission #1203033

#TimeUsernameProblemLanguageResultExecution timeMemory
1203033Adomas08Mosaic (IOI24_mosaic)C++20
0 / 100
90 ms22080 KiB
#include "mosaic.h" #include <bits/stdc++.h> using namespace std; std::vector<long long> mosaic(std::vector<int> X, std::vector<int> Y, std::vector<int> T, std::vector<int> B, std::vector<int> L, std::vector<int> R) { int n = X.size(), q = B.size(); vector <long long> anss; int row[3][n], col[3][n]; for (int i = 0; i < n; i++){ row[0][i] = X[i]; col[0][i] = Y[i]; } for (int i = 1; i < 3; i++){ bool top = Y[i]; row[i][0] = Y[i]; for (int j = 1; j < n; j++){ if (!row[i-1][j] && !top) row[i][j] = 1; else row[i][j] = 0; top = row[i][j]; } } for (int i = 1; i < 3; i++){ bool top = X[i]; col[i][0] = X[i]; for (int j = 1; j < n; j++){ if (!col[i-1][j] && !top) col[i][j] = 1; else col[i][j] = 0; top = col[i][j]; } } vector <int> ones; for (int i = 2; i < n; i++){ if (row[2][i]){ ones.push_back(2 - i); } if (col[2][i] && i != 2){ ones.push_back(i - 2); } } sort(ones.begin(), ones.end()); int worthr[3][n], worthc[3][n]; for (int i = 0; i < 3; i++){ for (int j = 0; j < n; j++){ if (j == 0){ worthr[i][j] = row[i][j]; worthc[i][j] = col[i][j]; } else{ worthr[i][j] = worthr[i][j-1] + row[i][j]; worthc[i][j] = worthc[i][j-1] + col[i][j]; } } } for (int i = 0; i < q; i++){ long long ans = 0; int t = T[i], b = B[i], l = L[i], r = R[i]; if (b > 2 && l <= 2){ int r1 = min(2, r); int t1 = max(3, t); for (int j = l; j <= r1; j++){ ans += worthc[j][b] - worthc[j][t1-1]; } } if (r > 2 && t <= 2){ int b1 = min(2, b); int l1 = max(3, l); for (int j = t; j <= b1; j++){ ans += worthr[j][r] - worthr[j][l1-1]; } } if (l <= 2 && t <= 2){ int r1 = min(2, r); int b1 = min(2, r); for (int j = l; j <= r1; j++){ if (t != 0) ans += worthc[j][b1] - worthc[j][t - 1]; else ans += worthc[j][b1]; } } l = max(l, 3); t = max(t, 3); int h1 = b - t + 1, l1 = r - l + 1; for (auto u : ones){ if (b - l > u) break; if (t - r < u) continue; int y = t - u; if (y >= l) ans += min(h1, r - y + 1); else{ ans += min(l1, h1 - l + y); } } anss.push_back(ans); } return anss; }
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...