Submission #1133833

#TimeUsernameProblemLanguageResultExecution timeMemory
1133833steveonalexChessboard (IZhO18_chessboard)C++20
100 / 100
347 ms1936 KiB
#include <bits/stdc++.h> using namespace std; typedef long long ll; typedef unsigned long long ull; #define MASK(i) (1LL << (i)) #define GETBIT(mask, i) (((mask) >> (i)) & 1) #define ALL(v) (v).begin(), (v).end() ll max(ll a, ll b){return (a > b) ? a : b;} ll min(ll a, ll b){return (a < b) ? a : b;} ll gcd(ll a, ll b){return __gcd(a, b);} ll LASTBIT(ll mask){return (mask) & (-mask);} int pop_cnt(ll mask){return __builtin_popcountll(mask);} int ctz(ll mask){return __builtin_ctzll(mask);} int logOf(ll mask){return __lg(mask);} mt19937_64 rng(chrono::high_resolution_clock::now().time_since_epoch().count()); ll rngesus(ll l, ll r){return l + (ull) rng() % (r - l + 1);} template <class T1, class T2> bool maximize(T1 &a, T2 b){ if (a < b) {a = b; return true;} return false; } template <class T1, class T2> bool minimize(T1 &a, T2 b){ if (a > b) {a = b; return true;} return false; } template <class T> void printArr(T& container, string separator = " ", string finish = "\n"){ for(auto item: container) cout << item << separator; cout << finish; } template <class T> void remove_dup(vector<T> &a){ sort(ALL(a)); a.resize(unique(ALL(a)) - a.begin()); } const ll INF = 1e18 + 69; ll count_black_chess(ll k){ return k * k / 2; } ll count_stuff(int i, int x, int y){ if (min(x, y) == 0) return 0; int _x = x / i, _y = y / i; ll ans = 1LL * _x * _y / 2 * i * i; ans += 1LL * ((_x + _y % 2) / 2) * (y - _y * i) * i; ans += 1LL * ((_y + _x % 2) / 2) * (x - _x * i) * i; ans += 1LL * ((_x + _y) % 2) * (x - _x * i) * (y - _y * i); return ans; } ll go(int i, vector<array<int, 4>> &arr){ // count number of overlapped black squares ll ans = 0; for(auto j: arr){ ans += count_stuff(i, j[2], j[3]); ans -= count_stuff(i, j[0]-1, j[3]); ans -= count_stuff(i, j[2], j[1]-1); ans += count_stuff(i, j[0]-1, j[1]-1); } return ans; } void solve(){ int n, k; cin >> n >> k; vector<array<int, 4>> arr(k); for(int i = 0; i < k; ++i) for(int j = 0; j < 4; ++j) cin >> arr[i][j]; ll tot_black = 0; for(auto &i: arr) { tot_black += 1LL * abs(i[3] - i[1] + 1) * abs(i[2] - i[0] + 1); } ll ans = INF; for(int i = 1; i < n; ++i){ if (n % i == 0){ ll cur = go(i, arr); ll black_cnt = 1LL * i * i * count_black_chess(n / i); minimize(ans, (black_cnt - cur) + (tot_black - cur)); cur = tot_black - cur; black_cnt = 1LL * n * n - black_cnt; minimize(ans, (black_cnt - cur) + (tot_black - cur)); } } cout << ans << "\n"; } int main(void){ ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); clock_t start = clock(); solve(); cerr << "Time elapsed: " << clock() - start << "ms!\n"; 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...