Submission #715005

#TimeUsernameProblemLanguageResultExecution timeMemory
715005StickfishChessboard (IZhO18_chessboard)C++17
70 / 100
2076 ms1852 KiB
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
using ll = long long;

bool get_color(pair<int, int> p, int d) {
    return (p.first / d + p.second / d) & 1;
}

signed main() {
    ll n, k;
    cin >> n >> k;
    vector<pair<pair<int, int>, pair<int, int>>> rect(k);
    for (int i = 0; i < k; ++i) {
        cin >> rect[i].first.first >> rect[i].first.second >> rect[i].second.first >> rect[i].second.second;
        --rect[i].first.first, --rect[i].first.second, --rect[i].second.first, --rect[i].second.second;
    }
    vector<ll> divs;
    for (int p = 1; p < n; ++p) {
        if (n % p == 0)
            divs.push_back(p);
    }
    int szd = divs.size();
    vector<ll> ans(szd);
    for (int di = 0; di < szd; ++di) {
        ll d = divs[di];
        if (n / d == 0)
            ans[di] = n * n / 2;
        else
            ans[di] = d * d * ((n / d) * (n / d) / 2);
    }
    for (auto [ld, ru] : rect) {
        for (int di = 0; di < szd; ++di) {
            ll d = divs[di];
            ll r = ld.first + (ru.first - ld.first) % (2 * d);
            ll u = ld.second + (ru.second - ld.second) % (2 * d);
            for (int i = ld.first; i <= r; ++i) for (int j = ld.second; j <= u; ++j) {
                if (get_color({i, j}, d))
                    --ans[di];
                else
                    ++ans[di];
            }
        }
    }
    ll mnans = n * n;
    for (auto x : ans) {
        mnans = min({mnans, x, n * n - x});
    }
    cout << mnans << '\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...