Pagini recente » Cod sursa (job #289290) | Cod sursa (job #79618) | Cod sursa (job #181116) | Cod sursa (job #2283410) | Cod sursa (job #31455)
Cod sursa(job #31455)
#include<fstream.h>
#include<stdio.h>
#define nmax 703
#define infi 2110000000
int long n,s[nmax],s1[nmax];
inline int long minim(int long a,int long b) {return a<b?a:b;}
int long rezolva(int long x)
{int long i,j,k1,min,v[nmax],p[nmax],cost=0,viz[nmax];
memset(p,0,sizeof(p));
memset(viz,0,sizeof(viz));
for(i=x;i<=n;i++)
v[i-x+1]=s1[i];
j=i-x+1;
for(i=1;i<x;i++,j++)
v[j]=s1[i];
for(i=1;i<=n;i++)
if(v[i]==s[i])
{p[i]=1;viz[i]=1;}
for(i=1;i<=n;i++)
if(!viz[i])
{for(j=i-1,min=infi;j>0;j--)
if(v[j]==s[i])
if(!p[j])
{min=i-j+20;
k1=j;
}
if(min==infi)
for(j=i+1;j<=n;j++)
if(v[j]==s[i]&&!p[j])
{if(j-i+20<min)
{min=j-i+20;
k1=j;}
break;
}
p[k1]=1;viz[i]=1;cost+=min;
}
return cost;
}
void ordoneaza()
{int long i,j,aux;
memcpy(s1,s,sizeof(s));
for(i=1;i<=n;i++)
for(j=i+1;j<=n;j++)
if(s1[i]>s1[j])
{aux=s1[i];
s1[i]=s1[j];
s1[j]=aux;
}
}
int main()
{int long i,min;
freopen("barman.in","r",stdin);
scanf("%ld",&n);
for(i=1;i<=n;i++)
scanf("%ld",&s[i]);
ordoneaza();
for(i=1,min=infi;i<=n;i++)
min=minim(min,rezolva(i));
freopen("barman.out","w",stdout);
printf("%ld",min);
fclose(stdout);
return 0;
}