Submission #1024964

#TimeUsernameProblemLanguageResultExecution timeMemory
1024964Alihan_8Garden (JOI23_garden)C++17
6 / 100
3064 ms24216 KiB

#include <bits/stdc++.h>

using namespace std;

#define all(x) x.begin(), x.end()
#define ar array
#define pb push_back
#define ln '\n'
#define int long long

using i64 = long long;

template <class F, class _S>
bool chmin(F &u, const _S &v){
    bool flag = false;
    if ( u > v ){
        u = v; flag |= true;
    }
    return flag;
}

template <class F, class _S>
bool chmax(F &u, const _S &v){
    bool flag = false;
    if ( u < v ){
        u = v; flag |= true;
    }
    return flag;
}

signed main(){
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);

    int n, m, d; cin >> n >> m >> d;

    vector <int> P(n), Q(n), R(m), S(m);

    for ( int i = 0; i < n; i++ ){
        cin >> P[i] >> Q[i];
    }

    for ( int i = 0; i < m; i++ ){
        cin >> R[i] >> S[i];
    }

    { // sorting
        vector <int> p_(m);

        iota(all(p_), 0);

        sort(all(p_), [&](int &u, int &v){
             return R[u] < R[v];
        });

        auto _R = R, _S = S;

        for ( int i = 0; i < m; i++ ){
            R[i] = _R[p_[i]];
            S[i] = _S[p_[i]];
        }

        p_ = vector <int> (n);

        iota(all(p_), 0);

        sort(all(p_), [&](int &u, int &v){
             return P[u] < P[v];
        });

        auto _P = P, _Q = Q;

        for ( int i = 0; i < n; i++ ){
            P[i] = _P[p_[i]];
            Q[i] = _Q[p_[i]];
        }
    }
    
    int opt = 1e9;
    
    for ( int x1 = 0; x1 < d; x1++ ){
		for ( int x2 = x1; x2 < d; x2++ ){
			for ( int y1 = 0; y1 < d * 2; y1++ ){
				for ( int y2 = y1; y2 < d * 2; y2++ ){
					bool ok = true;
					
					for ( int i = 0; i < n; i++ ){
						bool tmp = false;
						
						for ( auto t: {0LL, d} ){
							tmp |= (x1 <= P[i] && x2 >= P[i]) & (y1 <= Q[i] + t && y2 >= Q[i] + t);
						}
						
						ok &= tmp;
					}
					
					for ( int j = 0; j < m; j++ ){
						bool tmp = false;
						
						for ( auto t: {0LL, d} ){						
							tmp |= (x1 <= R[j] && x2 >= R[j]) | (y1 <= S[j] + t && y2 >= S[j] + t);
						}
						
						ok &= tmp;
					}
				
					if ( ok > 0 ){
						chmin(opt, (x2 - x1 + 1) * (y2 - y1 + 1));
					}
				}
			}
		}
	}
	
	cout << opt;

    cout << '\n';
}
#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...