Cod sursa(job #300715)

Utilizator ssergiussSergiu-Ioan Ungur ssergiuss Data 7 aprilie 2009 17:10:54
Problema Secv Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.08 kb
//#include<algorithm>
//using namespace std;
#include<stdio.h>

#define DIM 5001
#define INF 1000001

int a[DIM],sub[DIM];

void cpy(int a[DIM],int b[DIM]){
    int i;

	for(i=1; i<=b[0]; ++i)
		a[i]=b[i];}

void sort(){
	int i,j;

	for(i=1; i<a[0]; ++i)
		for(j=i+1; j<=a[0]; ++j)
			if(sub[i]>sub[j])
				sub[i]^=sub[j]^=sub[i]^=sub[j];}

void solve(){
    int i,j,k,min0;

    scanf("%d",&a[0]);
    for(i=1; i<=a[0]; ++i)
        scanf("%d",&a[i]);
	cpy(sub,a);
	sort();
	//sort(sub+1,sub+a[0]+1);
    for(i=1; i<=a[0]; ++i){
        sub[++sub[0]]=sub[i];
        for(; sub[i+1]==sub[i]&&i<a[0]; ++i);}
	/*for(i=1; i<=sub[0]; ++i)
		printf("%d ",sub[i]);*/
	for(i=1,min0=INF; i<=a[0]; ++i){
		for(; a[i]!=sub[1]&&i<=a[0]; ++i);
		for(j=i,k=1; k<=sub[0]&&j<=a[0]; ++j)
            if(a[j]==sub[k])
                ++k;
		if(k==sub[0]+1&&j-i+1<min0)
            min0=j-i;}
	if(min0==INF)
		printf("-1");
	else
		printf("%d",min0);}
int main(){

    freopen("secv.in","r",stdin);
    freopen("secv.out","w",stdout);

    solve();
    return 0;}