Cod sursa(job #493150)

Utilizator andrei.dAndrei Diaconeasa andrei.d Data 17 octombrie 2010 13:08:02
Problema Barman Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.05 kb
#include <cstdio>
#include <algorithm>

using namespace std;


#define file_in "barman.in"
#define file_out "barman.out"

#define nmax 666

int n;
int a[nmax];
int b[nmax];
int c[nmax];
char viz[nmax];


void adfile(void){
	
	freopen(file_in,"r",stdin);
	freopen(file_out,"w",stdout);
	
	
	scanf("%d", &n);
	for (int i=1;i<=n;++i)
		 scanf("%d", &a[i]),
		 b[i]=a[i];
	
	fclose(stdin);
	
	return ;
	
}


void solve(void){
	
	int i,j,k,suma,sol,x;
	
	sort(b+1,b+n+1);
	
	suma=0x3f3f3f3f;
	
	for (i=1;i<=n;++i){
		
		for (j=1;j<=n;++j)
	         c[j]=0,
			 viz[j]=0;
		for (j=1;j<=n;++j)
             if (a[j]==b[j])
				 c[j]=a[j],
				 viz[j]=1;
		int sol=0;
		for (j=1;j<=n;++j)
			 if (!viz[j]){
				 for (k=1;k<=n;++k)
					  if (a[j]==b[k] && !c[k]){
						  sol+=20+abs(j-k);
						  c[k]=a[j];
						  break;
					  }
			 }
		suma=min(suma,sol);
		x=b[n];
		for (j=n;j>=2;--j)
			 b[j]=b[j-1];
		b[j]=x;
	}
	
	printf("%d\n", suma);
}	
	
int main(){

	adfile();
	solve();
	
	return 0;
	
}