This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#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];
for (int i = ld.first; i <= ru.first; ++i) for (int j = ld.second; j <= ru.second; ++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 time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |