Submission #652635

#TimeUsernameProblemLanguageResultExecution timeMemory
652635ymmChessboard (IZhO18_chessboard)C++17
100 / 100
337 ms5824 KiB
#include <bits/stdc++.h> #define Loop(x,l,r) for (ll x = (l); x < (ll)(r); ++x) #define LoopR(x,l,r) for (ll x = (r)-1; x >= (ll)(l); --x) typedef long long ll; typedef std::pair<int, int> pii; typedef std::pair<ll , ll > pll; using namespace std; vector<ll> divs(ll x) { vector<ll> ans; for (ll y = 1; y*y <= x; ++y) { if (x%y == 0) { ans.push_back(y); ans.push_back(x/y); } } return ans; } pll get(ll l, ll r, ll len) { ll len2 = len*2; ll l2 = l%len2? l-l%len2+len2: l; ll r2 = r%len2? r-r%len2: r; ll a0 = (r2-l2)/2; ll a1 = (r2-l2)/2; a0 += max(0ll, l2-l-len); a1 += min(len, l2-l); a0 += min(len, r-r2); a1 += max(0ll, r-r2-len); return {a0, a1}; } const int N = 100'010; ll l0[N], r0[N]; ll l1[N], r1[N]; int main() { cin.tie(0) -> sync_with_stdio(false); ll n, k; cin >> n >> k; Loop (i,0,k) { cin >> l0[i] >> l1[i]; cin >> r0[i] >> r1[i]; --l0[i]; --l1[i]; } ll ans = n*n; for (ll x : divs(n)) { if (x == n) continue; ll sm0 = ((n/x) * (n/x) + 1)/2 * x * x; ll sm1 = ((n/x) * (n/x))/2 * x * x; Loop (i,0,k) { auto [a0, a1] = get(l0[i], r0[i], x); auto [b0, b1] = get(l1[i], r1[i], x); ll bl0 = a0*b0 + a1*b1; ll bl1 = a0*b1 + a1*b0; sm0 -= bl0; sm1 -= bl1; sm0 += (r0[i] - l0[i]) * (r1[i] - l1[i]) - bl0; sm1 += (r0[i] - l0[i]) * (r1[i] - l1[i]) - bl1; } ans = min(ans, sm0); ans = min(ans, sm1); } 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...