Cod sursa(job #374675)

Utilizator nomemoryAndrei Ciobanu nomemory Data 17 decembrie 2009 20:08:01
Problema Secventa Scor 0
Compilator c Status done
Runda Arhiva de probleme Marime 2.24 kb
#include <stdio.h>
#include <stdlib.h>

#define FIN "secventa.in"
#define FOUT "secventa.out"

int baza(int*,int);

/* Returneaza minimum-ul dintr-un sir secventa */
int baza(int* secv,int dim){
        int i,min;
        min=secv[0];
        for (i=1;i<dim;i++){
                if (min>secv[i]){
                        min=secv[i];
                }
        }
        return (min);
}

int main(){
        /* Contor */
        int i,ilim,N,K;

        /* Sirul de numere citit din fisier */
        int* sir;

        /* Pointer care imi indica de unde
        inceputul secventei raspuns */
        int* tmp;

        /* Secventa */
        int* s;
        int sdim;
        int sb;
        int sbt;
        int sdx;
        int ssx;

        /* Fisier */
        FILE* f;

        /* Citim date fis intrare */
        f=fopen(FIN,"r");
        fscanf(f,"%d",&N);
        fscanf(f,"%d",&K);

        /* Citim sirul din fisier */
        sir=(int*)calloc(N,sizeof(int));
        for (i=0;i<N;i++){
                fscanf(f,"%d",&sir[i]);
        }
        fclose(f);

        /* Identificam secventa de dim K */
        ilim=N-K+1;
        tmp=sir;
        s=sir;
        sdim=K;
        sb=baza(s,sdim);
        for(i=0;i<ilim;i++){
                sbt=baza(tmp,K);
                if(sbt>=sb){
                        s=tmp;
                        sb=sbt;
                        sdx=i;
                }
                tmp++;
        }

        /* Incercam sa extindem secventa */
        tmp=s;
        ssx=sdim+sdx;
        while(sdx>-1){
                --tmp;
                if(*tmp>=sb){
                        s=tmp;
                        sb=*tmp;
                        sdim++;
                }
                else{
                        break;
                }
        }

        while(ssx<N){
                ++ssx;
                if(s[ssx]>=sb){
                        sdim++;
                }
                else{
                        break;
                }
        }

        /* Afisare rezultate */
        f=fopen(FOUT,"w");
        for(i=0;i<sdim;i++){
                fprintf(f,"%d ",s[i]);
        }
        fclose(f);

        return (0);
}