Cod sursa(job #2682174)

Utilizator Alex_tz307Lorintz Alexandru Alex_tz307 Data 7 decembrie 2020 22:47:14
Problema Barman Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.13 kb
#include <bits/stdc++.h>
#define ABS(x) ((x) >= 0 ? (x) : -(x))
#define INF 0x3f3f3f3f

using namespace std;

ifstream fin("barman.in");
ofstream fout("barman.out");

void min_self(int &a, int b) {
    a = min(a, b);
}

int main() {
    int N;
    fin >> N;
    vector<int> v(N << 1 | 1), a(N + 1);
    for(int i = 1; i <= N; ++i) {
        fin >> a[i];
        v[i] = a[i];
    }
    sort(v.begin() + 1, v.begin() + N + 1);
    for(int i = 1; i < N; ++i)
        v[N + i] = v[i];
    int ans = INF;
    vector<bool> use(N + 1);
    for(int i = 1; i <= N; ++i) {
        int time = 0;
        for(int j = 1; j <= N; ++j)
            if(v[i + j - 1] != a[j])
                use[j] = true;
            else
                use[j] = false;
        for(int j = 1; j <= N; ++j)
            if(v[i + j - 1] != a[j])
                for(int k = 1; k <= N; ++k)
                    if(use[k] && v[i + k - 1] == a[j]) {
                        use[k] = false;
                        time += ABS(j - k) + 20;
                        break;
                    }
        min_self(ans, time);
    }
    fout << ans;
}