Submission #857312

#TimeUsernameProblemLanguageResultExecution timeMemory
857312NaimSSChessboard (IZhO18_chessboard)C++14
70 / 100
1056 ms3664 KiB
#include <bits/stdc++.h> #include <iostream> // #define int long long #define ld long double #define fastio ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0); #define pb push_back #define mp(a,b) make_pair(a,b) #define ms(v,x) memset(v,x,sizeof(v)) #define all(v) v.begin(),v.end() #define ff first #define ss second #define rep(i, a, b) for(int i = a; i < (b); ++i) #define per(i, a, b) for(int i = b-1; i>=a ; i--) #define trav(a, x) for(auto& a : x) #define allin(a , x) for(auto a : x) #define Unique(v) sort(all(v)),v.erase(unique(all(v)),v.end()); #define sz(v) ((int)v.size()) using namespace std; typedef vector<int> vi; #define y1 abacaba //#define left oooooopss #define db(x) cerr << #x <<" == "<<x << endl; #define db2(x,y) cerr<<#x <<" == "<<x<<", "<<#y<<" == "<<y<<endl; #define db3(x,y,z) cerr << #x<<" == "<<x<<", "<<#y<<" == "<<y<<", "<<#z<<" == "<<z<<endl; typedef long long ll; typedef pair<int,int> pii; typedef pair<ll,ll> pll; typedef vector<ll> vl; // std::mt19937_64 rng64((int) std::chrono::steady_clock::now().time_since_epoch().count()); std::mt19937 rng( // (int) std::chrono::steady_clock::now().time_since_epoch().count() 1239010 ); ll cdiv(ll a, ll b) { return a/b+((a^b)>0&&a%b); } // divide a by b rounded up ll fdiv(ll a, ll b) { return a/b-((a^b)<0&&a%b); } // divide a by b rounded down //inline ll mod(ll n, ll m ){ ll ret = n%m; if(ret < 0) ret += m; return ret; } ll gcd(ll a, ll b){return (b == 0LL ? a : gcd(b, a%b));} ll exp(ll b,ll e,ll m){ b%=m; ll ans = 1; for (; e; b = b * b % m, e /= 2) if (e & 1) ans = ans * b % m; return ans; } // debug: template<class T>void print_vector(vector<T> &v){ rep(i,0,sz(v))cout<<v[i]<<" \n"[i==sz(v)-1]; } void dbg_out() {cerr << endl; } template<typename Head, typename ... Tail> void dbg_out(Head H,Tail... T){ cerr << ' ' << H; dbg_out(T...); } #ifdef LOCAL #define dbg(...) cerr << "(" << #__VA_ARGS__ << "):", dbg_out(__VA_ARGS__), cerr << endl #else #define dbg(...) 42 #endif // const int N = 100100; ll x[N][2] , y[N][2]; int n,k; ll solve(int d,int ini){ ll L = n / d; ll totW = (L * L + 1)/2 * d * d; ll totB = (L*L)/2 * d * d; if(ini==1)swap(totW,totB); ll res = totB; auto add = [&](ll totW,ll totB,int inic){ if(inic)swap(totW,totB); res -= totB; res += totW; return ; }; auto go2 = [&](pll P1,pll P2){ if(P1.ff <= P2.ff && P1.ss <= P2.ss){ }else return; int inic = ((P1.ff/d + P1.ss/d)& 1)^ini; ll l = P2.ff - P1.ff + 1; if(P1.ss%d != 0){ ll nxt = P1.ss + (d - (P1.ss%d)) - 1; nxt = min(nxt, P2.ss); ll h = (nxt - P1.ss + 1); ll q = h * l; add(q, 0, inic); P1.ss = nxt + 1; } if(P1.ss > P2.ss)return; if(P2.ss % d != d-1){ ll prv = max(P1.ss, (P2.ss - (P2.ss%d) - 1) + 1); ll h = (P2.ss - prv + 1); ll q = h * l; int iniC = ini^((prv/d + P1.ff/d)&1); add(q,0,iniC); P2.ss = prv-1; } if(P1.ss > P2.ss)return; inic = ((P1.ff/d + P1.ss/d)& 1)^ini; ll h = (P2.ss - P1.ss + 1); if(h%d!=0)while(1); assert(h%d == 0); // check! h/=d; ll totW = (h + 1)/2 * l * d; ll totB = h/2 * l * d; add(totW, totB, inic); }; auto go = [&](pll P1, pll P2){ if(P1.ff <= P2.ff && P1.ss <= P2.ss){ int inic = ((P1.ff/d + P1.ss/d)& 1)^ini; ll l = P2.ff - P1.ff + 1; ll h = P2.ss - P1.ss + 1; // dbg("go", h,l,d); assert(l%d == 0); l/=d; ll totW = (l + 1)/2 * h * d; ll totB = l/2 * h * d; add(totW,totB,inic); } }; rep(i,0,k){ ll cur = res; pll p1; if(x[i][0] % d != 0){ p1.ff = x[i][0] + (d - (x[i][0]%d)); }else p1.ff = x[i][0]; p1.ss = y[i][0] + (y[i][0]%d==0 ? 0 : d - (y[i][0]%d)); pll p2; p2.ff = x[i][1] - (x[i][1]%d == d-1 ? 0 : (x[i][1]%d) + 1); p2.ss = y[i][1] - (y[i][1]%d == d-1 ? 0 : (y[i][1]%d) + 1); if(p1.ff <= p2.ff && p1.ss <= p2.ss){ // all inside: ll l = (p2.ff - p1.ff + 1)/d; ll h = (p2.ss - p1.ss + 1)/d; int inic =(((p1.ff/d)+(p1.ss/d)) &1)^ini; ll totW = (l*h + 1)/2 * d * d; ll totB = (l*h)/2 * d * d; dbg(totW,totB); add(totW,totB,inic); } // upper: pll P1 = pll(x[i][0],y[i][0]); pll P2 = pll(min(x[i][1],p1.ff -1), y[i][1]); go2(P1,P2); // lower P1 = pll(p2.ff + 1, y[i][0]), P2 = pll(x[i][1], y[i][1]); if(P1.ff >= x[i][0])go2(P1,P2); // left: P1 = pll(p1.ff,y[i][0]), P2 = pll(p2.ff, p1.ss-1); go(P1,P2); // right: P1 = pll(p1.ff, p2.ss + 1), P2 = pll(p2.ff,y[i][1]); go(P1,P2); // dbg(res - cur, x[i][0], y[i][0]); } dbg(d, ini , res); return res; } int32_t main(){ fastio; cin >> n >> k; rep(i,0,k){ rep(j,0,2){ cin >> x[i][j] >> y[i][j]; x[i][j]--,y[i][j]--; } } ll res = n * (ll) n; for(int d=1;d < n;d++){ if(n%d == 0){ res = min(res, solve(d,0)); res = min(res, solve(d,1)); } } cout << res << endl; // math -> gcd it all // Did you swap N,M? N=1? }

Compilation message (stderr)

chessboard.cpp: In function 'll solve(int, int)':
chessboard.cpp:58:18: warning: statement has no effect [-Wunused-value]
   58 | #define dbg(...) 42
      |                  ^~
chessboard.cpp:142:4: note: in expansion of macro 'dbg'
  142 |    dbg(totW,totB);
      |    ^~~
chessboard.cpp:124:6: warning: unused variable 'cur' [-Wunused-variable]
  124 |   ll cur = res;
      |      ^~~
chessboard.cpp:58:18: warning: statement has no effect [-Wunused-value]
   58 | #define dbg(...) 42
      |                  ^~
chessboard.cpp:160:2: note: in expansion of macro 'dbg'
  160 |  dbg(d, ini , res);
      |  ^~~
#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...