Submission #1205676

#TimeUsernameProblemLanguageResultExecution timeMemory
1205676AIF_is_carvingColouring a rectangle (eJOI19_colouring)C++20
20 / 100
58 ms17764 KiB
#include <bits/stdc++.h> using namespace std; typedef long long LL; void solve() { LL n, m; cin >> n >> m; vector<LL> a(n + m - 1), b(n + m - 1); LL sum = 0; for (LL i = 0; i < n + m - 1; i++) { cin >> a[i]; sum += a[i]; } for (LL i = 0; i < n + m - 1; i++) { cin >> b[i]; sum += b[i]; } // Special case: 1×M or N×1 grid if (n == 1 || m == 1) { LL total = 0; for (LL i = 0; i < n; i++) { for (LL j = 0; j < m; j++) { LL d1 = i - j + (m - 1); // index into a LL d2 = i + j; // index into b total += min(a[d1], b[d2]); } } cout << total << "\n"; return; } // Build padded diagonal arrays Ax, Bx LL diff = llabs(n - m); LL L = max(n, m); vector<LL> Ax, Bx; if (n >= m) { // pad A in front, append a[], pad B at back Ax.insert(Ax.end(), diff, 0); Ax.insert(Ax.end(), a.begin(), a.end()); Bx.insert(Bx.end(), b.begin(), b.end()); Bx.insert(Bx.end(), diff, 0); } else { // n < m: pad A at back, pad B in front Ax.insert(Ax.end(), a.begin(), a.end()); Ax.insert(Ax.end(), diff, 0); Bx.insert(Bx.end(), diff, 0); Bx.insert(Bx.end(), b.begin(), b.end()); } // Helper to compute the "mex" contribution on a given parity auto compute_mex = [&](bool take_even_indices){ vector<LL> U, V; for (LL i = 0; i < (LL)Ax.size(); i++) { if ((i % 2 == 0) == take_even_indices) U.push_back(Ax[i]); if ((i % 2 == 0) == (L % 2 == 1 ? take_even_indices : !take_even_indices)) V.push_back(Bx[i]); } if (U.size() < V.size()) swap(U, V); LL k = U.size() / 2; // fold pairs from ends for (LL i = 0; i < k; i++) { U[i] += U[U.size() - 1 - i]; } for (LL i = 0; i < (LL)V.size() / 2; i++) { V[i] += V[V.size() - 1 - i]; } // prefix sums for (LL i = 1; i <= k; i++) { U[i] += U[i - 1]; V[i] += V[i - 1]; } // insert zero at front for alignment U.insert(U.begin(), 0); V.insert(V.begin(), 0); LL best = 0; for (LL i = 0; i <= k; i++) { best = max(best, U[i] + V[k - i]); } return best; }; LL mex1 = compute_mex(true); LL mex2 = compute_mex(false); cout << (sum - mex1 - mex2) << "\n"; } int main() { ios::sync_with_stdio(false); cin.tie(nullptr); // single test case solve(); return 0; }
#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...