Cod sursa(job #1327160)

Utilizator dariusdariusMarian Darius dariusdarius Data 26 ianuarie 2015 13:57:36
Problema Barman Scor 10
Compilator cpp Status done
Runda simulareoji2015 Marime 1.34 kb
#include <algorithm>
#include <fstream>
using namespace std;
const int MAX_N = 666;

int n, a[MAX_N];
int sorted[MAX_N];
bool ok[MAX_N];

inline void rotate_left() {
    int aux = sorted[1];
    for (int i = 1; i < n; ++ i) {
        sorted[i] = sorted[i + 1];
    }
    sorted[n] = aux;
}

int main() {
    ifstream fin("barman.in");
    ofstream fout("barman.out");
    fin >> n;
    for (int i = 1; i <= n; ++i) {
        fin >> a[i];
        sorted[i] = a[i];
    }
    sort(sorted + 1, sorted + n + 1);
    int solution = 1.e9;
    for (int rotation = 1; rotation <= n; ++ rotation) {
        int answer = 0;
        for (int i = 1; i <= n; ++i) {
            if (a[i] == sorted[i]) {
                ok[i] = true;
            } else {
                ok[i] = false;
            }
            for (int i = 1; i <= n; ++i) {
                if (a[i] == sorted[i]) {
                    continue;
                }
                for (int j = 1; j <= n; ++j) {
                    if (!ok[j] && a[i] == sorted[j]) {
                        ok[j] = true;
                        answer += 20 + abs(i - j);
                        break;
                    }
                }
            }
        }
        solution = min(solution, answer);
        rotate_left();
    }
    fout << solution << "\n";
    return 0;
}