Submission #1294987

#TimeUsernameProblemLanguageResultExecution timeMemory
1294987Hamed_GhaffariCultivation (JOI17_cultivation)C++20
30 / 100
54 ms804 KiB
#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 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...