Submission #721116

#TimeUsernameProblemLanguageResultExecution timeMemory
721116cig32Chessboard (IZhO18_chessboard)C++17
100 / 100
523 ms5844 KiB
#include "bits/stdc++.h" #define int long long using namespace std; const int MAXN = 1e5 + 10; void solve(int tc) { int n,k; cin >> n>>k; int x1[k],y1[k],x2[k],y2[k]; for(int i=0; i<k; i++) { cin >> x1[i] >> y1[i] >> x2[i] >> y2[i]; x1[i]--; y1[i]--; x2[i]--; y2[i]--; } vector<int> prof; for(int i=1; i*i<=n; i++) { if(n%i == 0) { prof.push_back(i); if(i*i!=n && i!=1) prof.push_back(n/i); } } sort(prof.begin(), prof.end()); int ans = 1e18; for(int s: prof) { int c[2] = {0, 0}; // number of black cells for each (i/S + j/S) mod 2 for(int i=0; i<k; i++) { int type0 = 0; int type1 = 0; int l = y1[i], r = y2[i]; if(l / (2*s) == r / (2*s)) { if(r % (2*s) < s) type0 += r-l+1; else if(l % (2*s) >= s) type0 += 0; else type0 += s - (l % (2*s)); } else { if(l % (2*s) >= s) { int md = l % (2*s); l += 2*s - md; } else { int md = l % (2*s); type0 += s - md; l += 2*s - md; } if(r % (2*s) >= s) { int md = r % (2*s); r -= md+1; type0 += s; } else { int md = r % (2*s); r -= md+1; type0 += md+1; } type0 += (r-l+1) / 2; } type1 = y2[i]-y1[i]+1 - type0; l = x1[i], r = x2[i]; int type2 = 0; int type3 = 0; if(l / (2*s) == r / (2*s)) { if(r % (2*s) < s) type2 += r-l+1; else if(l % (2*s) >= s) type2 += 0; else type2 += s - (l % (2*s)); } else { if(l % (2*s) >= s) { int md = l % (2*s); l += 2*s - md; } else { int md = l % (2*s); type2 += s - md; l += 2*s - md; } if(r % (2*s) >= s) { int md = r % (2*s); r -= md+1; type2 += s; } else { int md = r % (2*s); r -= md+1; type2 += md+1; } type2 += (r-l+1) / 2; } type3 = x2[i]-x1[i]+1 - type2; //cout<<s<<" "<<type0<<" "<<type1<<" "<<type2<<" "<<type3<<"\n"; int d = type0 * type2 + type1 * type3; c[0] += d; c[1] += (x2[i] - x1[i] + 1) * (y2[i] - y1[i] + 1) - d; } int t[2] = {0, 0}; int nums = (n/s) * (n/s); t[0] = s*s * ((nums+1) / 2); t[1] = s*s * (nums / 2); ans = min(ans, abs(t[0] - c[0]) + c[1]); ans = min(ans, abs(t[1] - c[1]) + c[0]); // cout<<ans<<"\n"; } cout << ans << "\n"; } int32_t main() { ios::sync_with_stdio(0); cin.tie(0); int t=1; //cin>>t; for(int i=1; i<=t; i++)solve(i); }
#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...