Cod sursa(job #593506)

Utilizator SpiderManSimoiu Robert SpiderMan Data 3 iunie 2011 12:18:44
Problema Barman Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.14 kb
# include <algorithm>
# include <cstdio>

const char *FIN = "barman.in", *FOU = "barman.out" ;
const int MAX = 605 ;

int A[MAX], B[MAX], C[MAX] ;
bool D[MAX] ;
int N ;

int main (void) {
    freopen (FIN, "r", stdin) ;

    scanf ("%d", &N) ;
    for (int i = 1; i <= N; ++i)
        scanf ("%d", A + i), B[i] = A[i] ;
    std :: sort (B + 1, B + N + 1) ;

    int sol = 0x7FFFFFFF ;
    for (int i = 1, act = 0; i <= N; ++i) {
        for (int j = 1; j <= N; ++j)
            C[j] = act, D[j] = 0 ;
        for (int j = 1; j <= N; ++j)
            if (A[j] == B[j])
                C[j] = A[j], D[j] = 1 ;
        int aux = 0 ;
        for (int j = 1; j <= N; ++j) {
            if (D[j] == 0) {
                for (int k = 1; k <= N; ++k)
                    if (A[j] == B[k] && C[k] == act) {
                        aux += abs (j - k) + 20, C[k] = A[j] ;
                        break ;
                    }
            }
        }
        sol = std :: min (sol, aux) ;
        aux = B[N] ;
        memmove (&B[2], &B[1], sizeof (int) * (N - 1)) ;
        B[1] = aux ;
    }
    fprintf (fopen (FOU, "w"), "%d", sol) ;
}