제출 #1369895

#제출 시각아이디문제언어결과실행 시간메모리
1369895kawhietChessboard (IZhO18_chessboard)C++20
100 / 100
153 ms3560 KiB
#include <bits/stdc++.h>
using namespace std;

#ifdef LOCAL
#include "debug.h"
#else
#define dbg(...) 47
#endif

#define int long long

int f(int d, int s) {
    int ret = (s / (2 * d)) * d;
    s %= 2 * d;
    int mn = min(d, s);
    return ret + mn;
}

int get(int d, int l, int r) {
    return f(d, r + 1) - f(d, l);
}

signed main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    int n, k;
    cin >> n >> k;
    vector<int> x1(k), y1(k), x2(k), y2(k);
    for (int i = 0; i < k; i++) {
        cin >> x1[i] >> y1[i] >> x2[i] >> y2[i];
        x1[i]--; y1[i]--; x2[i]--; y2[i]--;
    }
    int ans = n * n;
    for (int d = 1; d < n; d++) {
        if (n % d != 0) {
            continue;
        }
        int c1 = (n * n / d / d + 1) / 2 * d * d;
        int c2 = (n * n / d / d) / 2 * d * d;
        for (int i = 0; i < k; i++) {
            int w0 = get(d, y1[i], y2[i]);
            int w1 = y2[i] - y1[i] + 1 - w0;
            int l = x1[i], r = x2[i];
            int h1 = get(d, l, r);
            int h2 = r - l + 1 - h1;
            c1 += h1 * (w1 - w0);
            c1 += h2 * (w0 - w1);
            c2 += h1 * (w0 - w1);
            c2 += h2 * (w1 - w0);
        }
        ans = min(ans, c1);
        ans = min(ans, c2);
    }
    cout << ans << '\n';
    return 0;
}
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…