Submission #495194

#TimeUsernameProblemLanguageResultExecution timeMemory
495194IerusChessboard (IZhO18_chessboard)C++17
47 / 100
96 ms26640 KiB
#include<bits/stdc++.h> /* #include <ext/pb_ds/assoc_container.hpp> #include <ext/pb_ds/tree_policy.hpp> using namespace __gnu_pbds; */ using namespace std; #pragma GCC optimize ("unroll-loops,Ofast,O3") #pragma GCC target("avx,avx2,fma") #define F first #define S second #define sz(x) (int)x.size() #define pb push_back #define int long long #define eb emplace_back #define all(x) (x).begin(),(x).end() #define rall(x) (x).rbegin(),(x).rend() #define NFS ios_base::sync_with_stdio(0) , cin.tie(0) , cout.tie(0) ; #define file(s) if (fopen(s".in", "r")) freopen(s".in", "r", stdin), freopen(s".out", "w", stdout) //#define ordered_set tree<int, null_type,less<int>, rb_tree_tag,tree_order_statistics_node_update> typedef long long ll; const int E = 1e6+777; const long long inf = 1e18+777; const int N = 1e5+777; const int MOD = 1e9+7; vector<int> div(int x){ vector<int> res = {1}; for(int i = 2; i <= x / 2; ++i){ if(x % i == 0){ res.pb(i); } } return res; } struct block{ int x1, y1, x2, y2; void read(){ cin >> x1 >> y1 >> x2 >> y2; } }a[N]; int n, k; int get1(){ int b[N][2]{}; for(int i = 1; i <= k; ++i){ ++b[a[i].x1][a[i].y1&1]; } int cnt1 = n * n / 2 + (n & 1); int cnt2 = n * n - cnt1; int sum1 = 0, sum2 = 0; for(int i = 1; i <= n; ++i){ if(i & 1){ sum1 += b[i][1]; sum2 += b[i][0]; }else{ sum1 += b[i][0]; sum2 += b[i][1]; } } return min(cnt1 - sum1 + sum2, cnt2 - sum2 + sum1); } int pref[2111][2111], ar[2111][2111]; void precalc(){ for(int l = 1; l <= k; ++l){ ar[a[l].x1][a[l].y1] = 1; } pref[1][1] = ar[1][1]; for(int i = 2; i <= n; i++) { pref[i][1] = pref[i-1][1] + ar[i][1]; } for(int i = 2; i <= n; i++) { pref[1][i] = pref[1][i-1] + ar[1][i]; } for (int i = 2; i <= n; i++) { for (int j = 2; j <= n; j++) { pref[i][j] = pref[i-1][j] + pref[i][j-1] - pref[i-1][j-1] + ar[i][j]; } } } long long query(int x1, int y1, int x2, int y2) { return pref[x2][y2] - pref[x1 - 1][y2] - pref[x2][y1 - 1] + pref[x1 - 1][y1 - 1]; } int get2(vector<int> &d, int res = LLONG_MAX){ precalc(); for(auto x : d){ int sum1 = 0, sum2 = 0, cnt1 = 0, cnt2 = 0; bool ok = 1; for(int i = 1; i <= n; i += x){ for(int j = 1; j <= n; j += x){ int x1 = i, y1 = j, x2 = i + x - 1, y2 = j + x - 1; int cur = query(x1, y1, x2, y2); if(ok & 1){ sum1 += cur; cnt1 += x * x; }else{ sum2 += cur; cnt2 += x * x; } ok ^= 1; } if((n / x) % 2 == 0) ok ^= 1; } res = min({res, cnt1 - sum1 + sum2, cnt2 - sum2 + sum1}); } return res; } main(){ cin >> n >> k; for(int i = 1; i <= k; ++i){ a[i].read(); } vector<int> d = div(n); if(sz(d) == 1){ cout << get1() << '\n'; }else{ cout << get2(d); } };

Compilation message (stderr)

chessboard.cpp:106:1: warning: ISO C++ forbids declaration of 'main' with no type [-Wreturn-type]
  106 | main(){
      | ^~~~
#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...