Submission #683522

#TimeUsernameProblemLanguageResultExecution timeMemory
683522Ronin13Chessboard (IZhO18_chessboard)C++14
47 / 100
186 ms3380 KiB
#include <bits/stdc++.h> #define ll long long #define ull unsigned ll #define f first #define s second #define pii pair<ll,ll> #define pll pair<ll,ll> #define pb push_back #define epb emplace_back using namespace std; /* 6 8 3 3 3 3 1 2 1 2 3 4 3 4 5 5 5 5 4 3 4 3 4 4 4 4 2 1 2 1 3 6 3 6 */ int pos[100001][2]; ll compute_line(ll x1, ll y1, ll x2, ll y2, ll k){ ll u = (x1 / k + y1 / k); ll v = (x2 / k + y2 / k); ll a = (x2 - x1 + 1); ll b = (y2 - y1 + 1); ll cnt = 0; if(u % 2 == v % 2){ if(u & 1){ cnt += k * a; } else cnt -= k * a; } ll c = k - (y2 % k); if(u & 1){ cnt -= c * a; } else cnt += c * a; ll d = y1 % k; d++; if(v & 1) cnt -= d * a; else cnt += d * a; return cnt; } ll C(ll x1, ll y1, ll x2, ll y2, ll k){ if((x1 / k) == (x2 / k)){ if((y1 / k) == (y2 / k)){ ll x = x1 / k + y1 / k; if(x % 2) return 0-(x2 - x1 + 1) * (y2 - y1 + 1); return (x2 - x1 + 1) * (y2 - y1 + 1); } return compute_line(x1, y1, x2, y2, k); } if(y1 / k == y2 / k) return compute_line(y1, x2, y2, x2, k); ll cnt = 0; cnt += compute_line(x1, y1, x1 / k * k + (k - 1), y2, k); cnt += compute_line(x2 / k * k, y1, x2, y2, k); ll v = x2 / k; v -= x1 / k; v--; if(v){ ll j = x1 / k * k + k; ll nw = compute_line(j, y1, j + k, y2, k); if(v & 1) cnt += nw; } return cnt; } int main(){ // freopen("school.in", "r", stdin); // freopen("school.out", "w", stdout); ll n, k; cin >> n >> k; ll x1[k + 1], x2[k + 1], y1[k + 1], y2[k + 1]; for(int i = 1; i <= k; ++i){ cin >> x1[i] >> y1[i] >> x2[i] >> y2[i]; x1[i]--; y1[i]--; x2[i]--; y2[i]--; } ll ans = 1e18 + 1; for(int a = 1; a <n; a++){ if(n % a) continue; ll v = n / a; ll cnt = 0; if(v % 2 == 1) cnt += v * (v / 2) + (v + 1) / 2; else cnt = v * v / 2; cnt *= a * a; for(int i = 1; i <= k; i++){ cnt -= C(x1[i], y1[i], x2[i], y2[i], a); } ans = min(ans, cnt); } for(ll a = 1; a <n; a++){ if(n % a) continue; ll v = n / a; ll cnt = -1; if(v % 2 == 1) cnt += v * (v / 2) + (v + 1) / 2; else cnt = v * v / 2; cnt *= a * a; for(int i = 1; i <= k; i++) cnt += C(x1[i], y1[i], x2[i], y2[i], a); ans = min(ans, cnt); } cout << ans; return 0; }

Compilation message (stderr)

chessboard.cpp: In function 'long long int compute_line(long long int, long long int, long long int, long long int, long long int)':
chessboard.cpp:29:8: warning: unused variable 'b' [-Wunused-variable]
   29 |     ll b = (y2 - y1 + 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...