Submission #651941

#TimeUsernameProblemLanguageResultExecution timeMemory
651941vovikChessboard (IZhO18_chessboard)C++17
100 / 100
935 ms10388 KiB
//I wrote this code 4 u today #include <bits/stdc++.h> #define vc vector #define nd node* #define pnd pair<nd, nd> using namespace std; typedef long long ll; typedef vector<ll> vll; typedef pair<ll, ll> pll; typedef vc<pll> vpll; typedef vc<vll> vvll; typedef vc<vpll> vvpll; template<const ll MOD> struct mod_mul : std::multiplies<const ll> { ll operator()(const ll a, const ll b) { return (a * b) % MOD; } }; template<typename T> inline void sort(T &a) { sort(a.begin(), a.end()); } template<typename T> inline void unique(T &a) { a.resize(unique(a.begin(), a.end()) - a.begin()); } template<typename T> inline void reverse(T &a) { reverse(a.begin(), a.end()); } const ll INF = 9023372036854775808ll; const ll MOD = 1000000007ll; #define int ll ll get(int x, int y, int s, int c) { return (ll)x * s * (y & 1) * ((c == 0) - (c == 1)); } ll get(int x, int y, int s) { int a = x / s, b = y / s; ll ans = 0; if (((a & 1) + (b & 1)) >> 1) ans += s * s; if ((a & 1) != (b & 1)) ans -= (x % s) * (y % s); else ans += (x % s) * (y % s); ans += get(x % s, b, s, a & 1); ans += get(y % s, a, s, b & 1); // //[0; y], x % s; // { // ll f = 0; // f += (y / (2 * s)) * s; // if (y % (2 * s) > s) f += y % (2 * s) - s; // f *= x % s; // if (a & 1) f = (ll) (x % s) * y - f; // ans += f; // } // { // ll f = ((a * s) / (2 * s)) * s; // f *= y % s; // if (b & 1) f = (ll) (y % s) * (a * s) - f; // ans += f; // } return ans; } ll get(pair<int, int> x, int s) { return get(x.first, x.second, s); } int32_t main() { cin.tie(nullptr)->ios_base::sync_with_stdio(false); int n, k; cin >> n >> k; vc<vc<pair<int, int>>> tr(k, vc<pair<int, int>>(4)); for (auto &i: tr) { int a, b, c, d; cin >> a >> b >> c >> d; i = { {c, d}, {a - 1, d}, {c, b - 1}, {a - 1, b - 1} }; } ll ans = INF; for (int s = 1; s < n; ++s) { if (n % s) continue; ll sm = ((ll)n * n / s / s) / 2 * s * s; for (auto v : tr) { sm += get(v[0], s) - get(v[1], s) - get(v[2], s) + get(v[3], s); } ans = min(ans, min(sm, (ll)n * n - sm)); } cout << ans << '\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...