Submission #844080

#TimeUsernameProblemLanguageResultExecution timeMemory
844080GrandTiger1729Chessboard (IZhO18_chessboard)C++17
100 / 100
790 ms4188 KiB
#include <bits/stdc++.h> using namespace std; struct Data { int x1, y1, x2, y2; Data() = default; Data(int _x1, int _y1, int _x2, int _y2) : x1(_x1), y1(_y1), x2(_x2), y2(_y2) {} }; const long long INF = 1e18; int main() { cin.tie(0)->sync_with_stdio(0); // freopen("in.in", "r", stdin); // freopen("out.out", "w", stdout); int M, n; cin >> M >> n; vector<Data> a(n); for (int i = 0; i < n; i++) { int x1, y1, x2, y2; cin >> x1 >> y1 >> x2 >> y2; x1--, y1--; a[i] = Data(x1, y1, x2, y2); } auto color = [&](int t, int K, int x, int y) -> long long // 1 for black -1 for white { return (t + x / K + y / K) % 2 == 1 ? 1 : -1; }; auto solve = [&](int K) -> long long { long long ret1 = (1ll * (M / K) * (M / K) / 2 + M / K % 2) * K * K; for (auto &[x1, y1, x2, y2] : a) { int l1 = (x1 / K + (x1 % K > 0)) * K, r1 = (x2 / K) * K, l2 = (y1 / K + (y1 % K > 0)) * K, r2 = (y2 / K) * K; ret1 -= color(1, K, x1, y1) * (l1 - x1) * (l2 - y1); if (color(1, K, l1, y1) != color(1, K, r1, y1)) ret1 -= color(1, K, l1, y1) * K * (l2 - y1); ret1 -= color(1, K, r1, y1) * (x2 - r1) * (l2 - y1); if (color(1, K, x1, l2) != color(1, K, x1, r2)) ret1 -= color(1, K, x1, l2) * (l1 - x1) * K; if (color(1, K, l1, l2) != color(1, K, r1, l2) && color(1, K, l1, l2) != color(1, K, l1, r2)) ret1 -= color(1, K, l1, l2) * K * K; if (color(1, K, r1, l2) != color(1, K, r1, r2)) ret1 -= color(1, K, r1, l2) * (x2 - r1) * K; ret1 -= color(1, K, x1, r2) * (l1 - x1) * (y2 - r2); if (color(1, K, l1, r2) != color(1, K, r1, r2)) ret1 -= color(1, K, l1, r2) * K * (y2 - r2); ret1 -= color(1, K, r1, r2) * (x2 - r1) * (y2 - r2); } long long ret2 = (1ll * (M / K) * (M / K) / 2) * K * K; for (auto &[x1, y1, x2, y2] : a) { int l1 = (x1 / K + (x1 % K > 0)) * K, r1 = (x2 / K) * K, l2 = (y1 / K + (y1 % K > 0)) * K, r2 = (y2 / K) * K; ret2 -= color(2, K, x1, y1) * (l1 - x1) * (l2 - y1); if (color(2, K, l1, y1) != color(2, K, r1, y1)) ret2 -= color(2, K, l1, y1) * K * (l2 - y1); ret2 -= color(2, K, r1, y1) * (x2 - r1) * (l2 - y1); if (color(2, K, x1, l2) != color(2, K, x1, r2)) ret2 -= color(2, K, x1, l2) * (l1 - x1) * K; if (color(2, K, l1, l2) != color(2, K, r1, l2) && color(2, K, l1, l2) != color(2, K, l1, r2)) ret2 -= color(2, K, l1, l2) * K * K; if (color(2, K, r1, l2) != color(2, K, r1, r2)) ret2 -= color(2, K, r1, l2) * (x2 - r1) * K; ret2 -= color(2, K, x1, r2) * (l1 - x1) * (y2 - r2); if (color(2, K, l1, r2) != color(2, K, r1, r2)) ret2 -= color(2, K, l1, r2) * K * (y2 - r2); ret2 -= color(2, K, r1, r2) * (x2 - r1) * (y2 - r2); } return min(ret1, ret2); }; long long ans = INF; for (int t = 1; t < M; t++) if (M % t == 0) ans = min(ans, solve(t)); cout << ans << '\n'; 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...