Cod sursa(job #1327068)

Utilizator PaueyPaula Nicoleta Gradu Pauey Data 26 ianuarie 2015 12:47:49
Problema Barman Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.29 kb
#include <cmath>

#include <algorithm>
#include <iostream>
#include <fstream>
#define inf (1<<29)
#define MAXN 606
using namespace std;

struct pahar {
    int val, pozs, pozd;
};

pahar a[MAXN];

int N;

bool cmp(pahar x, pahar y) {
    if(x.val == y.val)
        return x.pozs < y.pozs;
    return x.val < y.val;
}

int main()
{
    ifstream cin("barman.in");
    ofstream cout("barman.out");
    int cost = inf, fin = 0;
    cin >> N;
    for(int i = 1; i <= N; ++i) {
        cin >> a[i].val;
        a[i].pozs = a[i].pozd = i;
        if(a[i].val == a[i - 1].val) {
            a[i].pozs = a[i - 1].pozs;
            a[i - 1].pozd = a[i].pozd;
        }
    }
    sort(a + 1, a + N + 1, cmp);
    for(int i = 1; i <= N; ++i) {
        int ans = 0;
        for(int j = 1; j <= N; ++j) {
            if(j + i - 1 <= a[j].pozd && j + i - 1 >= a[j].pozs) {
                continue;
            }
            else {
                int dec = (j + i - 1) % N;
                if(!dec)
                    dec = N;
                ans = ans + abs(a[j].pozs - dec) + 20;
            }
        }
        if(ans < cost) {
            cost = ans;
            fin = i;
        }
        //cout << i << ' ' << ans << '\n';
    }
    cout << cost << '\n';
    return 0;
}