Submission #946060

#TimeUsernameProblemLanguageResultExecution timeMemory
946060atomChessboard (IZhO18_chessboard)C++17
100 / 100
798 ms10240 KiB
#include "bits/stdc++.h"
// @JASPER'S BOILERPLATE
using namespace std;
using ll = long long;

#ifdef JASPER
#include "debug.h"
#else
#define debug(...) 166
#endif

#define int long long

vector <vector <int>> rect;
int n, m;
int res = 1e18;

int f(int x, int y, int k) {
    int cnt = 0;
    int _x = (x / k) * k, _y = (y / k) * k;
    if ((_x / k + _y / k) & 1) {
        cnt += ((_x / k) * (_y / k)) / 2 * (k * k);
        cnt += ((_y / k) + 1) / 2 * (x - _x) * k;
        cnt += ((_x / k) + 1) / 2 * (y - _y) * k;
    }
    else {
        cnt += ((_x / k) * (_y / k) + 1) / 2 * (k * k);
        cnt += ((_y / k)) / 2 * (x - _x) * k;
        cnt += ((_x / k)) / 2 * (y - _y) * k;
        cnt += (x - _x) * (y - _y);
    }
    return cnt;
}

void solve(int k) {
    int ans = (n * n - f(n, n, k));
    for (auto x : rect) {
        int x1 = x[0], y1 = x[1], x2 = x[2], y2 = x[3];
        int w = f(x2, y2, k) + f(x1 - 1, y1 - 1, k) - f(x2, y1 - 1, k) - f(x1 - 1, y2, k);
        ans += w;
        ans -= (x2 - x1 + 1) * (y2 - y1 + 1) - w; 
    }

    res = min({res, ans, n * n - ans});
}

signed main() {
    cin.tie(0) -> sync_with_stdio(0);
    
    #ifdef JASPER
        freopen("in1", "r", stdin);
    #endif
        
    cin >> n >> m;
    for (int i = 1; i <= m; ++i) {
        int x1, y1, x2, y2;
        cin >> x1 >> y1 >> x2 >> y2;
        rect.push_back({x1, y1, x2, y2});
    }

    for (int i = 1; i * i <= n; ++i) {
        if (n % i == 0) {
            solve(i);
            if (i != n / i && i > 1)
                solve(n / i); 
        }
    }
    cout << res << "\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...