Pagini recente » Cod sursa (job #332624) | Cod sursa (job #693166) | Cod sursa (job #292570) | Cod sursa (job #2682117) | Cod sursa (job #199403)
Cod sursa(job #199403)
#include<stdio.h>
long n,i,a[700],bb[1400],*b,m,j,c[700],sol=2000000000;
void citire();
void sortare();
void normalizare();
void solve();
void afisare();
int main()
{
citire();
for(i=1;i<=n;i++)
{ b=&bb[i-1];
solve();
}
afisare();
return 0;
}
void citire()
{
freopen("barman.in","rt",stdin);
scanf("%ld",&n);
for(i=1;i<=n;i++)
{ scanf("%ld",&a[i]);
a[i]-=2000000000;
}
normalizare();
sortare();
for(i=1;i<=n;i++)bb[i+n]=bb[i];
}
void sortare()
{
n=0;
for(i=1;i<=m;i++)
for(j=1;j<=c[i];j++)
bb[++n]=i;
}
void normalizare()
{
long L=1,R=n,min;
while(L<=R)
{ min=1;
for(i=L;i<=R;i++)
min=(a[i]<min)?a[i]:min;
if(min==1)return;
m++;
while(a[L]==min){a[L]=m;L++;c[m]++;}
while(a[R]==min){a[R]=m;R--;c[m]++;}
for(i=L;i<=R;i++)
if(a[i]==min){a[i]=m;c[m]++;}
}
}
void solve()
{ long LA,LB,RA,RB,sc,s1,s2,va[700],vb[700],val,
qa[1400],qb[1400],*pa,*pb,nr,*paux;
LA=1;LB=1;
RA=n;RB=n;
sc=0;
for(j=1;j<=n;j++)
{ va[j]=0;vb[j]=0;
if(a[j]==b[j]){va[j]=1;vb[j]=1;}
}
while(LA<=RA)
{ if(va[LA]){LA++;continue;}
if(va[RA]){RA--;continue;}
if(vb[LB]){LB++;continue;}
if(vb[RB]){RB--;continue;}
val=a[LA];
nr=0;pa=&qa[650];pb=&qb[650];
for(j=LA;j<=RA;j++)
{ if(!va[j])
if(a[j]==val){pa[++nr]=j;va[j]=1;}
}
nr=0;
for(j=LB;j<=RB;j++)
{ if(!vb[j])
if(b[j]==val){pb[++nr]=j;vb[j]=1;}
}
if(pa[1]<pb[1]&&pb[nr]<pa[nr])
while(pa[nr]>pb[nr]){pa[0]=pa[nr]-n;pa--;}
else
if(pb[1]<pa[1]&&pa[nr]<pb[nr])
{ paux=pa;pa=pb;pb=paux;
while(pa[nr]>pb[nr]){pa[0]=pa[nr]-n;pa--;}
}
else
if(pa[1]>pb[nr])
{paux=pa;pa=pb;pb=paux;}
s1=20*nr;
for(j=1;j<=nr;j++)
{ s1+=pb[j];s1-=pa[j];}
s2=s1;
for(j=1;j<=nr;j++)
{ s1+=pa[j];s1-=pb[nr-j+1];
pa[j]+=n;
s1+=pa[j];s1-=pb[nr-j+1];
s2=(s2<s1)?s2:s1;
}
sc+=s2;
}
sol=(sc<sol)?sc:sol;
}
void afisare()
{
freopen("barman.out","wt",stdout);
printf("%ld\n",sol);
}