Submission #689391

#TimeUsernameProblemLanguageResultExecution timeMemory
689391YENGOYANChessboard (IZhO18_chessboard)C++17
70 / 100
240 ms3528 KiB
/*
        //\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\\
        \\                                    //
        //  271828___182845__904523__53602__  \\
        \\  87___47____13______52____66__24_  //
        //  97___75____72______47____09___36  \\
        \\  999595_____74______96____69___67  //
        //  62___77____24______07____66__30_  \\
        \\  35___35____47______59____45713__  //
        //                                    \\
        \\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\//
                                                    */

#include <iostream>
#include <vector>
#include <set>
#include <map>
#include <unordered_map>
#include <unordered_set>
#include <cmath>
#include <climits>
#include <algorithm>
#include <random>
#include <queue>
#include <deque>
#include <iomanip>
#include <string>
#include <tuple>
#include <bitset>
#include <chrono>
#include <ctime>
#include <fstream>
#include <stack>
#include <cstdio>

using namespace std;
using ll = long long;
const int N = 3e5 + 5;
const ll mod = 1e9 + 7, inf = 1e18;

void solve() {
    ll n, k; cin >> n >> k;
    ll od = 0, ev = 0, side = 1;
    for (int i = 1; i * i <= n; ++i) {
        if (n % i) continue;
        side = i;
    }
    vector<pair<int, int>> vp;
    while (k--) {
        int x1, y1, x2, y2; cin >> x1 >> y1 >> x2 >> y2;
        vp.push_back({ x1, y1 });
    }
    ll ans = n * n;
    for (int i = 1; i * i <= n; ++i) {
        if (n % i) continue;
        int od = 0, ev = 0;
        int ii = i;
        for (pair<int, int> xx : vp) {
            int x = xx.first, y = xx.second;
            int x_pos = (x + ii - 1) / ii, y_pos = (y + ii - 1) / ii;
            if (x_pos % 2 == y_pos % 2) ++ev;
            else ++od;
        }
        // sevov sksvi
        ll edge = n / ii, c = (edge * edge + 1) / 2;
        ll a = od + c * ii * ii - ev;
        c = edge * edge / 2;
        ll b = ev + c * ii * ii - od;
        ans = min({ ans, a, b });
        ii = n / i;
        if (ii == n) continue;
        od = 0, ev = 0;
        for (pair<int, int> xx : vp) {
            int x = xx.first, y = xx.second;
            int x_pos = (x + ii - 1) / ii, y_pos = (y + ii - 1) / ii;
            if (x_pos % 2 == y_pos % 2) ++ev;
            else ++od;
        }
        edge = n / ii, c = (edge * edge + 1) / 2;
        a = od + c * ii * ii - ev;
        c = edge * edge / 2;
        b = ev + c * ii * ii - od;
        ans = min({ ans, a, b });
    }
    cout << ans << "\n";
}

int main() {
    ios_base::sync_with_stdio(0);
    cin.tie(NULL);
    //int t; cin >> t;
    //while (t--)	
    solve();
}

Compilation message (stderr)

chessboard.cpp: In function 'void solve()':
chessboard.cpp:43:8: warning: unused variable 'od' [-Wunused-variable]
   43 |     ll od = 0, ev = 0, side = 1;
      |        ^~
chessboard.cpp:43:16: warning: unused variable 'ev' [-Wunused-variable]
   43 |     ll od = 0, ev = 0, side = 1;
      |                ^~
chessboard.cpp:43:24: warning: variable 'side' set but not used [-Wunused-but-set-variable]
   43 |     ll od = 0, ev = 0, side = 1;
      |                        ^~~~
#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...