Cod sursa(job #462319)

Utilizator zloteanu.adrianzloteanu adrian nichita zloteanu.adrian Data 10 iunie 2010 13:56:18
Problema Barman Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.06 kb
#include<fstream.h>
int long n,s[703],s1[703];
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[703],p[703],cost=0,viz[703];
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=2110000000;j>0;j--)
      if(v[j]==s[i])
       if(!p[j])
	{min=i-j+20;
	k1=j;}
   if(min==2110000000)
    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;}
int main()
{int long i,min;
ifstream q("barman.in");
ofstream w("barman.out");
q>>n;
for(i=1;i<=n;i++)
  q>>s[i];
int long 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;}
for(i=1,min=2110000000;i<=n;i++)
  min=minim(min,rezolva(i));
w<<min;
return 0;}