제출 #341415

#제출 시각아이디문제언어결과실행 시간메모리
341415ivan_tudorChessboard (IZhO18_chessboard)C++14
70 / 100
1196 ms17576 KiB
#include<bits/stdc++.h> using namespace std; const int N = 1e5 + 5; struct eventhelp{ int t; int l, r; int val; int type; }; void add_int(int l, int r, long long val, long long &cnti, long long &cntp){ int pare, impare; int dst = r - l + 1; pare = dst/2; impare = dst/2; if(dst%2 == 1){ if(l%2 == 0) pare++; else impare++; } cnti += 1LL * impare * val; cntp += 1LL * pare * val; } vector<eventhelp> ev; long long ans = LLONG_MAX; int n; bool cmpev(eventhelp a, eventhelp b){ if(a.t == b.t) return a.type > b.type; return a.t < b.t; } long long imp[N], pr[N]; void solve(int len){ vector<eventhelp> evc = ev; for(int i=len; i<=n;i+=len){ evc.push_back({i, 0, 0, 0}); } inplace_merge(evc.begin(), evc.begin() + ev.size(), evc.end(), cmpev); long long sumi = 0, acti = 0, sump = 0, actp = 0; for(auto e:evc){ if(e.type != 0){ int fgroup = (e.l - 1)/len + 1; int lgroup = (e.r - 1)/len + 1; if(fgroup + 1 <= lgroup - 1){ add_int(fgroup, lgroup, 1LL* e.val * len, sumi, sump); add_int(fgroup, lgroup, 1LL* e.type * len, acti, actp); } if(fgroup != lgroup){ add_int(fgroup, fgroup, 1LL * e.val * (fgroup*len - e.l + 1), sumi, sump); add_int(fgroup, fgroup, 1LL * e.type * (fgroup*len - e.l + 1), acti, actp); add_int(lgroup, lgroup, 1LL * e.val * (e.r - (lgroup - 1)*len), sumi, sump); add_int(lgroup, lgroup, 1LL * e.type * (e.r - (lgroup - 1)*len), acti, actp); } if(fgroup == lgroup){ add_int(fgroup, fgroup, 1LL * e.val * (e.r - e.l + 1), sumi, sump); add_int(fgroup, fgroup, 1LL * e.type * (e.r - e.l + 1), acti, actp); } } else{ long long csumi, csump; csumi = sumi - acti * (n - e.t); csump = sump - actp * (n - e.t); imp[e.t/len] = csumi; pr[e.t/len] =csump; } } long long fans = 0, sans = 0; for(int i = 1; i<=n/len;i++){ long long ci, cp; ci = imp[i] - imp[i-1]; cp = pr[i] - pr[i -1]; int nrp = (n/len)/2, nri = n/len - nrp; if(i %2 == 1){ fans += 1LL*len*len*nri - ci + cp; sans += 1LL*len*len*nrp - cp + ci; } else{ sans += 1LL*len*len*nri - ci + cp; fans += 1LL*len*len*nrp - cp + ci; } } ans = min(ans, sans); ans = min(ans, fans); } int main() { //freopen(".in","r",stdin); ios::sync_with_stdio(false); cin.tie(0),cout.tie(0); int k; cin>>n>>k; for(int i=1;i<=k;i++){ int x1, y1, x2, y2; cin>>x1>>y1>>x2>>y2; ev.push_back({x1, y1, y2, n - x1 + 1, 1}); ev.push_back({x2, y1, y2,-(n - x2), -1}); } sort(ev.begin(), ev.end(), cmpev); for(int d = 1; d<n; d++){ if(n%d == 0) solve(d); } cout<<ans; 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...