제출 #343292

#제출 시각아이디문제언어결과실행 시간메모리
343292SprdaloChessboard (IZhO18_chessboard)C++17
70 / 100
255 ms1004 KiB
#include <bits/stdc++.h>

using namespace std;

#define int ll
typedef long long ll;
typedef long double ld;
typedef pair<int, int> pi;
typedef pair<ll, ll> pl;
typedef vector<int> vi;
typedef vector<ll> vl;
typedef vector<double> vd;
typedef vector<bool> vb;
typedef vector<char> vc;
typedef vector<string> vs;
typedef vector<pi> vp;
typedef vector<pl> vpl;

void no(){
    cout << "-1\n";
    exit(0);
}

signed main()
{
    ios_base::sync_with_stdio(false); 
    cin.tie(nullptr); 
    cout.tie(nullptr); 
    cerr.tie(nullptr);    

    int n, k;
    cin >> n >> k;

    vi d;
    for (int i = 1; i < n; ++i){
        if (n % i == 0){
            d.push_back(i);
        }
    }

    int len = d.size();
    vi b(len);
    for (int i = 0; i < k; ++i){
        int x1,y1,x2,y2;
        cin >> x1>>y1>>x2>>y2;

        if (x1!=x2 || y1 != y2)
            return 0;
        --x1;
        --y1;

        for (int j = 0; j < len; ++j){
            int t = d[j];

            bool b1 = (x1%(2*t) < t), b2 = (y1%(2*t) < t);
            if (b1 == b2){
                b[j]++;
            }
        }
    }

    int sol = n*n;
    for (int i = 0; i < len; ++i){
        int t = d[i],c;
        
        if (n % (2*t) == 0)
            c = (n*n)/2;
        else
            c = ((n-t)*(n-t))/2 + n*t;

        int res = k-b[i] + c-b[i];
        //cout << c << ' ';
        sol = min(sol, res);

        b[i] = k-b[i];

        c = n*n-c;

        res = k+c - 2 * b[i];
        //cout << c << endl;
        sol = min(sol, res);
    }

    cout << sol << '\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...