#include <bits/stdc++.h>
using namespace std;
using ll = long long;
using pii = pair<int, int>;
#define X first
#define Y second
#define mid ((l+r)>>1)
#define lc id<<1
#define rc lc|1
#define all(x) x.begin(), x.end()
#define SZ(x) int(x.size())
#define mins(a, b) (a = min(a, b))
#define maxs(a, b) (a = max(a, b))
int n, R, C, ans;
pii a[303];
vector<int> vec[42];
int32_t main() {
cin.tie(0); cout.tie(0); ios_base::sync_with_stdio(0);
cin >> R >> C >> n;
for(int i=1; i<=n; i++) cin >> a[i].X >> a[i].Y;
sort(a+1, a+n+1, [&](pii x, pii y) {
return x.Y < y.Y;
});
ans = 1e9;
for(int u=0; u<R; u++) for(int d=0; d<R; d++) {
for(int i=1; i<=R; i++) vec[i].clear();
for(int i=1; i<=n; i++)
for(int x=max(1, a[i].X-u); x<=R && x<=a[i].X+d; x++)
if(vec[x].empty() || vec[x].back()!=a[i].Y)
vec[x].push_back(a[i].Y);
bool bad = 0;
int mn = -1e9, mx = -1e9, mxe = 0;
for(int i=1; i<=R; i++) {
if(vec[i].empty()) {
bad = 1;
break;
}
maxs(mn, C-vec[i].back());
maxs(mx, vec[i][0]-1);
for(int j=1; j<SZ(vec[i]); j++)
maxs(mxe, vec[i][j]-vec[i][j-1]-1);
}
if(bad) continue;
mins(ans, u + d + max(mxe, mx+mn));
}
cout << ans << '\n';
return 0;
}
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |