Cod sursa(job #463959)

Utilizator DraStiKDragos Oprica DraStiK Data 18 iunie 2010 11:23:50
Problema Barman Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.22 kb
#include <algorithm>
#include <bitset>
using namespace std;

#define INF 0x3f3f3f3f
#define DIM 605

int a[DIM],b[DIM],c[DIM];
bitset <DIM> viz;
int n,rez;

void read ()
{
    int i;

    scanf ("%d",&n);
    for (i=1; i<=n; ++i)
    {
        scanf ("%d",&a[i]);
        b[i]=a[i];
    }
}

void solve ()
{
    int i,j,k,nrc,cur;

    nrc=0;
    rez=INF;
    sort (b+1,b+n+1);

    for (i=1; i<=n; ++i)
    {
        for (j=1; j<=n; ++j)
        {
            c[j]=nrc;
            viz[j]=0;
        }
		for (j=1; j<=n; ++j)
			if (a[j]==b[j])
			{
                c[j]=a[j];
                viz[j]=1;
			}
		cur=0;
		for (j=1; j<=n; ++j)
			if (!viz[j])
                for (k=1; k<=n; ++k)
                    if (a[j]==b[k] && c[k]==nrc)
                    {
                        cur+=20+abs (j-k);
                        c[k]=a[j];
                        break ;
                    }
        rez=min (rez,cur);
        cur=b[n];
        for (j=n; j>1; --j)
            b[j]=b[j-1];
        b[1]=cur;
    }
	printf ("%d",rez);
}

int main ()
{
    freopen ("barman.in","r",stdin);
    freopen ("barman.out","w",stdout);

    read ();
    solve ();

    return 0;
}