Cod sursa(job #205929)

Utilizator mihaipoascaPoasca Mihai mihaipoasca Data 3 septembrie 2008 17:01:04
Problema Secv Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.66 kb
#include<stdio.h>
FILE *fin=fopen("secv.in","r"),
    *fout=fopen("secv.out","w");

int N,a[5005];
struct nod{int x;nod* next;};
typedef nod* sir;
sir s;

int cnt;


int main(){
    fscanf(fin,"%d",&N);

    fscanf(fin,"%d ",&a[1]);
    s=new nod;
    s->x=a[1];
    s->next=NULL;
    ++cnt;



    for(int i=2;i<=N;i++){
        fscanf(fin,"%d",&a[i]);

        sir aux=new nod;
        aux->x=a[i];



        if(a[i]<s->x){
            aux->next=s;
            s=aux;
            ++cnt;
        }
        else
        if(a[i]!=s->x)
        {

            sir p;
            for(p=s;p->next&&p->next->x<a[i];p=p->next);

            if(p->next==NULL){
                p->next=aux;
                aux->next=NULL;
                ++cnt;
            }
            else
                if(p->next->x!=a[i]){
                    aux->next=p->next;
                    p->next=aux;
                    +cnt;
                }
        }

    }


/*
    for(sir p=s;p;p=p->next)
        fprintf(fout,"%d ",p->x );
*/

    int pozi;

    if(s==NULL){
        fprintf(fout,"1\n");
        return 0;
    }


    int i;
    sir inc=s;
    int sol=5005;
    int k=1;
while(sol>cnt&&k<=N)
if(a[k]==inc->x){

    s=inc;


    for(i=k;a[i]!=s->x;i++);
    for(;a[i]==s->x;i++);
    pozi=i-1;
    k=i;

    s=s->next;



    for(;i<=N&&s;i++)
        if(a[i]==s->x) s=s->next;

    if(s==NULL&&sol>i-pozi)
        sol=i-pozi;

    }
else
    ++k;



    if(sol==5005)
        fprintf(fout,"-1\n");
    else
        fprintf(fout,"%d\n",sol);

    fclose(fin);
    fclose(fout);
    return 0;


}