Cod sursa(job #230285)

Utilizator katakunaCazacu Alexandru katakuna Data 13 decembrie 2008 15:34:23
Problema Secv Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.1 kb
#include<stdio.h>
#define INF 1<<30
#include<algorithm>
using namespace std;

int Min,i,j,n,m,a[5111],b[5111],v[5111],c1[5003],c2[5003];

int main(){

FILE *f=fopen("secv.in","r");
fscanf(f,"%d",&n);
  for(i=1;i<=n;i++){
  fscanf(f,"%d",&a[i]);
  v[i]=a[i];
  }
fclose(f);

sort(v+1,v+1+n);

v[0]=-1;

  for(i=1;i<=n;i++){
    if(v[i]!=v[i-1]){
    m++;
    b[m]=v[i];
    }
  }


  for(i=0;i<=n;i++){
  c1[i]=1;
  c2[i]=-1;
  }


  for(i=1;i<=m;i++){

    for(j=1;j<=n;j++){
      if(c1[j]!=-1){
         if(b[i] == a[j]){
         c2[j]=c1[j];

           if(c2[j-1]!=-1 && c2[j] > c2[j-1] + 1)
           c2[j] = c2[j-1] + 1;
           
         }

         else{
           if(c2[j-1]!=-1)
           c2[j] = c2[j-1] + 1;
         }
      }
    }

    for(j=0;j<=n;j++){
    c1[j]=c2[j];
    c2[j]=-1;
    }
    
  }

Min=INF;
  for(j=1;j<=n;j++){
    if(c1[j]!=-1){
      if(c1[j]<Min)
      Min=c1[j];
    }
  }

FILE *g=fopen("secv.out","w");
  if(Min==INF)
  fprintf(g,"%d",-1);
  else
  fprintf(g,"%d",Min);
  
fclose(g);

return 0;
}