Submission #289676

#TimeUsernameProblemLanguageResultExecution timeMemory
289676luciocfChessboard (IZhO18_chessboard)C++14
100 / 100
709 ms4348 KiB
#include <bits/stdc++.h> #define ff first #define ss second using namespace std; typedef pair<int, int> pii; typedef long long ll; const int maxn = 1e5+10; const ll inf = 1e18+10; pair<pii, pii> rect[maxn]; ll qtd(int k, int d) { if (k < 0) return 0; ++k; int oldk = k; ll ans = (k/(2*d))*d; k -= ((k/(2*d))*(2*d)); return (ans+min(d, k)); } ll get_menor(int i, int d) { ll linha = qtd(rect[i].ss.ss, d)-qtd(rect[i].ff.ss-1, d); ll col = qtd(rect[i].ss.ff, d)-qtd(rect[i].ff.ff-1, d); return linha*col; } ll get_maior(int i, int d) { ll linha = (rect[i].ss.ss-rect[i].ff.ss+1) - (qtd(rect[i].ss.ss, d)-qtd(rect[i].ff.ss-1, d)); ll col = (rect[i].ss.ff-rect[i].ff.ff+1) - (qtd(rect[i].ss.ff, d)-qtd(rect[i].ff.ff-1, d)); return linha*col; } int main(void) { int n, k; scanf("%d %d", &n, &k); for (int i = 1; i <= k; i++) { scanf("%d %d", &rect[i].ff.ff, &rect[i].ff.ss); scanf("%d %d", &rect[i].ss.ff, &rect[i].ss.ss); rect[i].ff.ff--, rect[i].ff.ss--; rect[i].ss.ff--, rect[i].ss.ss--; } vector<int> D; for (int d = 1; d*d <= n; d++) { if (n%d) continue; D.push_back(d); if (n/d != d) D.push_back(n/d); } ll ans = inf; for (auto d: D) { if (d == n) continue; ll p = 0, b = 0; for (int i = 1; i <= k; i++) { ll x = get_menor(i, d) + get_maior(i, d); p += x; b += (1ll*(rect[i].ss.ff-rect[i].ff.ff+1)*(rect[i].ss.ss-rect[i].ff.ss+1) - x); } ll x = ((n+2*d-1)/(2*d)); ll y = n/(2*d); ll tot_p = 1ll*d*d*(x*x+y*y); ans = min(ans, (tot_p-p)+b); swap(p, b); tot_p = 1ll*n*n-tot_p; ans = min(ans, (tot_p-p)+b); } printf("%lld\n", ans); }

Compilation message (stderr)

chessboard.cpp: In function 'll qtd(int, int)':
chessboard.cpp:20:6: warning: unused variable 'oldk' [-Wunused-variable]
   20 |  int oldk = k;
      |      ^~~~
chessboard.cpp: In function 'int main()':
chessboard.cpp:47:7: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   47 |  scanf("%d %d", &n, &k);
      |  ~~~~~^~~~~~~~~~~~~~~~~
chessboard.cpp:51:8: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   51 |   scanf("%d %d", &rect[i].ff.ff, &rect[i].ff.ss);
      |   ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
chessboard.cpp:52:8: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   52 |   scanf("%d %d", &rect[i].ss.ff, &rect[i].ss.ss);
      |   ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#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...