Submission #1129620

#TimeUsernameProblemLanguageResultExecution timeMemory
1129620Hurryup_7735Growing Vegetables is Fun 5 (JOI24_vegetables5)C++20
0 / 100
183 ms9796 KiB
//What did I do to deserve it?!
#pragma GCC optimize("O3")
#include <bits/stdc++.h>

using namespace std;

#define ll long long
#define ld long double
#define endl '\n'
#define pb push_back
#define pf push_front
#define speedyboy ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);
#define all(x) x.begin() , x.end()
#define allr(x) x.rbegin() , x.rend()
#define F first
#define S second
#define pll pair<ll , ll>
#define pss pair<string , string>
#define YES cout << "YES" << endl;
#define NO cout << "NO" << endl;


const ll sz = 5e5 + 5 , INF = 1e18 ,  MOD = 1e9 + 7;
ll a[sz];
vector<pll> v;


ll i , j , k;
void solve() {
    ll n;
    cin >> n;
    vector<ll> a(2 * n);
    for (ll i = 0; i < 2 * n; i++) cin >> a[i];
    vector<ll> redPots(n), bluePots(n);
    for (ll i = 0; i < n; i++) cin >> redPots[i];
    for (ll i = 0; i < n; i++) cin >> bluePots[i];
    sort(all(redPots));
    sort(all(bluePots));
    sort(all(a)); // Fidanları da sıralayaq ki, performans artsın
    ll mn = INF;
    // Bütün mümkün maskaları yoxlayırıq
    for (ll mask = 0; mask < (1LL << (2 * n)); mask++) {
        // Qırmızı qabların sayı N olmalıdır
        if (__builtin_popcountll(mask) != n) continue;
        // "Gözəl düzülüş" şərtini yoxlayırıq
        bool beautiful = false;
        for (ll i = 0; i <= 2 * n - n; i++) {
            bool sameColor = true;
            ll color = (mask >> i) & 1;
            for (ll j = i; j < i + n; j++) {
                if (((mask >> j) & 1) != color) {
                    sameColor = false;
                    break;
                }
            }
            if (sameColor) {
                beautiful = true;
                break;
            }
        }
        if (!beautiful) continue;
        // Fidanları rənglərinə görə bölürük
        vector<ll> redSeeds, blueSeeds;
        for (ll i = 0; i < 2 * n; i++) {
            if ((mask >> i) & 1) {
                redSeeds.push_back(a[i]);
            } else {
                blueSeeds.push_back(a[i]);
            }
        }
        // Qrupların ölçüsünü yoxlayırıq
        if (redSeeds.size() != n || blueSeeds.size() != n) continue;
        // Fidanları sıralayırıq
        sort(all(redSeeds));
        sort(all(blueSeeds));
        // Çətinliyi hesablayırıq
        ll mx = 0;
        for (ll i = 0; i < n; i++) {
            mx = max(mx, abs(redSeeds[i] - redPots[i]));
            mx = max(mx, abs(blueSeeds[i] - bluePots[i]));
            // Əgər mx artıq mn-dən böyükdürsə, davam etməyə ehtiyac yoxdur
            if (mx >= mn) break;
        }
        mn = min(mn, mx);
    }
    cout << mn << endl;
}


signed main(){
    speedyboy;
    //open;
    ll t = 1;
    //cin >> t;
    while(t--){
        solve();
    }
}
#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...