제출 #1296179

#제출 시각아이디문제언어결과실행 시간메모리
1296179am_aadvikGarden (JOI23_garden)C++20
0 / 100
3097 ms96244 KiB
#include <iostream> #include<vector> #include<set> #include<chrono> #include<random> const int inf = 1e9; using namespace std; int n, m, d; int solve(int x, int y, vector<pair<int, int>>& a, vector<pair<int, int>>& b) { vector<vector<vector<int>>> g(d, vector<vector<int>>(d, vector<int>(0))); int al = d, ar = 0, au = n, ad = 0; //o(d^2*(n+m)) To Be Optimized to o(d^2*m) for (int i = 0; i < d; ++i) for (int j = 0; j < d; ++j) { for (int k = 0; k < n; ++k) if ((((i + x) % d) == (a[k].first % d)) && (((j + y) % d) == (a[k].second % d))) g[i][j].push_back(k), al = min(al, j + y), ar = max(ar, j + y), au = min(au, i + x), ad = max(ad, i + x); for (int k = 0; k < m; ++k) if ((((i + x) % d) == (b[k].first % d)) || (((j + y) % d) == (b[k].second % d))) g[i][j].push_back(k + n); } //o(d^2*m) int ans = inf; for (int si = x; si <= au; ++si) for (int ei = max(si, ad); ei < (x + d); ++ei) { //row si to row di int sj = al, ej = ar; for (auto o : b) { int r = o.first % d; while (r < si) r += d; if (r > ei) { int c = o.second % d; while (c < y) c += d; sj = min(sj, c), ej = max(ej, c); } } int cur = (ej - sj + 1) * (ei - si + 1); ans = min(ans, cur); } return ans; } int mrand(int l, int r) { unsigned seed = std::chrono::system_clock::now().time_since_epoch().count(); mt19937 g(seed); uniform_int_distribution<int> d(l, r); return d(g); } int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); cin >> n >> m >> d; vector<pair<int, int>> a(n); vector<pair<int, int>> b(m); for (auto& x : a) cin >> x.first >> x.second; for (auto& x : b) cin >> x.first >> x.second; int ans = inf; ans = min(ans, solve(0, 0, a, b)); for (int i = 0; i < 20; ++i) { int x = mrand(0, d + d); int y = mrand(0, d + d); ans = min(ans, solve(x, y, a, b)); } cout << ans; }
#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...