제출 #368087

#제출 시각아이디문제언어결과실행 시간메모리
368087nicolaalexandraChessboard (IZhO18_chessboard)C++14
47 / 100
249 ms4320 KiB
#include <bits/stdc++.h>

using namespace std;

int n,k,i,x,y,x2,y2;
struct dreptunghi{
    int x,y,x2,y2;
};
vector <dreptunghi> v;

long long count_(int x, int y, int val){
    if (!x || !y)
        return 0;

    long long sol = 1LL * (x/val) * (y/val) / 2 * val * val;
    int lastx = (x/val) * val, lasty = (y/val) * val;

    if (x/val % 2)
        sol +=  (y/val + 1)/2  * val * (x - lastx);
    else sol += (y/val/2) * val * (x - lastx);


    if (y/val % 2)
        sol += (x/val + 1)/2 * val * (y - lasty);
    else sol += (x/val/2) * val * (y - lasty);


    if (!(x/val % 2 == y/val%2))
        sol += (x - lastx) * (y - lasty);

    return sol;
}

long long solve (int val){
    long long albe = 1LL * (n/val) * (n/val) / 2 * val * val; /// cate ar trebui sa fac albe daca e toata tabla neagra
    long long negre = 1LL * n * n - albe;

    for (auto it : v){
        int x = it.x, y = it.y, x2 = it.x2, y2 = it.y2;

        long long cnt = count_(x2,y2,val) - count_(x2,y-1,val) - count_(x-1,y2,val) + count_(x-1,y-1,val);

        negre -= (x2-x+1) * (y2-y+1) - cnt; /// nu are sens sa le fac pe astea negre
        negre += cnt; /// trb sa le fac la loc  albe pe astea

        albe += (x2-x+1) * (y2-y+1) - cnt;
        albe -= cnt;
    }

    return min (albe,negre);
}

int main (){

    //ifstream cin ("date.in");
    //ofstream cout ("date.out");

    cin>>n>>k;
    for (i=1;i<=k;i++){
        cin>>x>>y>>x2>>y2;
        v.push_back({x,y,x2,y2});
    }

    long long sol = 1LL * n * n;
    for (int d=1;d<n;d++){
        if (n % d == 0)
            sol = min (sol,solve(d));
    }

    cout<<sol;

    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...