Cod sursa(job #205919)

Utilizator mihaipoascaPoasca Mihai mihaipoasca Data 3 septembrie 2008 16:03:39
Problema Secv Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.89 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 main(){
    fscanf(fin,"%d",&N);

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




    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;
        }
        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;
            }
            else
                if(p->next->x!=a[i]){
                    aux->next=p->next;
                    p->next=aux;
                }
        }

    }


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

    int pozi;

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

    s=s->next;

    if(s==NULL)
        fprintf(fout,"1\n");
    else{
        for(;i<=N&&s;i++)
            if(a[i]==s->x) s=s->next;

        if(s==NULL)
            fprintf(fout,"%d\n",i-pozi);
        else
            fprintf(fout,"-1\n");
    }

/*
    if(s==NULL)
        fprintf(fout,"1\n");
    else

        if(s->next!=NULL){
            for(;i<=N&&s->next!=NULL;i++)
                if(a[i]==s->x) s=s->next;
            if(s->next==NULL)
                fprintf(fout,"%d\n",i-pozi+1);
            else
                fprintf(fout,"-1\n");

        }
        else{
            for(;i<=N&&a[i]!=s->x;i++);
            if(i<=N)
                fprintf(fout,"%d\n",i-pozi+1);
            else
                fprintf(fout,"-1\n");
        }

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


}