Cod sursa(job #1328152)

Utilizator jordasIordache Andrei Alexandru jordas Data 28 ianuarie 2015 01:51:27
Problema Secv Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.81 kb
#include <fstream>
#include <cstdlib>
#define nMax 5000

using namespace std;

 ifstream x ("secv.in");
 ofstream y ("secv.out");

 int n;
 int v[nMax],a[nMax];
 int start[nMax];

 void quicksort(int a[], int l, int r)
 {
     int i,j;
     int pivot,poz;
     int aux;

     poz=rand()%(r-l+1)+l;

     pivot=a[poz];

     aux=a[poz];
     a[poz]=a[l];
     a[l]=aux;

     i=l+1;
     poz=l;

     for(j=l+1;j<=r;j++)
        if(pivot>a[j])
        {
            aux=a[i];
            a[i]=a[j];
            a[j]=aux;

            i++;
        }

     aux=a[poz];
     a[poz]=a[i-1];
     a[i-1]=aux;

     if(l<i-2)
        quicksort(a,l,i-2);
     if(i<r)
        quicksort(a,i,r);
 }

int main()
{
    int i,j;

    x>>n;

    int k=0;
    bool flag;

    for(i=0;i<n;i++)
    {
        x>>v[i];

        flag=true;

        for(j=0;j<k;j++)
           if(v[i]==a[j])
           {
               flag=false;
               break;
           }

        if(flag==true)
        {
            a[k]=v[i];
            k++;
        }
    }

    quicksort(a,0,k-1);
/*
    for(i=0;i<k;i++)
       y<<a[i]<<' ';
    y<<'\n';
*/
    int N=n-k;
    int c1,c2;
    int minn=nMax+1;

    for(i=0;i<N;i++)
       if(v[i]==a[0])
       {
           c1=i+1;
           c2=1;

           while(c2<k && c1<n)
              if(v[c1]==a[c2])
              {
                  c1++;
                  c2++;
              }
              else
                 c1++;

           if(c2==k)
           {
               start[i]=c1-i;
               minn=min(minn,start[i]);
           }
       }
/*
    for(i=0;i<n;i++)
       y<<start[i]<<' ';
    y<<'\n';
*/
    if(minn<=nMax)
       y<<minn<<'\n';
    else
       y<<-1<<'\n';

    return 0;
}