Cod sursa(job #1727814)

Utilizator mircea_marian.popaPopa Mircea-Marian mircea_marian.popa Data 11 iulie 2016 17:30:04
Problema Secventa 3 Scor 0
Compilator c Status done
Runda Arhiva de probleme Marime 2.48 kb
#include <stdio.h>
#include <stdlib.h>

void getVal(unsigned short n, unsigned short data[2][n] , unsigned short i1 , unsigned short i2 , float *val ,
    unsigned short u ){
    unsigned short a = i2 - i1 + 1;
    if( a == u ) {
        //printf("i1=%d i2=%d\n" , i1, i2);
        unsigned short i;
        unsigned int sc = 0 , st = 0;
        for(i = i1 ; i <= i2 ; i++ ){
            sc += data[0][i];
            st += data[1][i];
            //printf("%d %d " , data[0][i], data[1][i]);
        }
        //printf("\n  ");
        float rez = ((float)sc)/st;
        if( rez > *val )
            //{*val = rez;printf("16: %d %d %f %d %d\n", i1, i2, rez, sc , st);}
            *val = rez;
    } else if( a > u ) {
        unsigned short m = (i1 + i2)/2, i, k, b, c;
        unsigned int sc = 0 , st = 0;
        float rez;
        getVal(n,data,i1,m,val,u);
        getVal(n,data,m+1,i2,val,u);
        u--;
        if( m + u > i2 )
            c = i2 - m - u + 2;
        else
            c = 0;
        b = m + u - c;
        for( k = m - c ; k <= b ; k++ ){
                sc += data[0][k];
                st += data[1][k];
        }
        for(i = c + 1; i < u ; i++){
            b = m + u - i;
            sc = sc + data[0][b] - data[0][m - i -1 ];
            st = st + data[1][b] - data[1][m - i -1 ];
            /*for( k = m - i ; k <= b ; k++ ){
                sc += data[0][k];
                st += data[1][k];
            }*/
            rez = (1.0 * sc)/st;
            if( rez > *val )
                //{*val = rez;printf("37: %d %d\n", m-1, b);}
                *val = rez;
        }
    }
}
int main(){
    FILE * fi = fopen("secv3.in","rt");
    unsigned short n, l, u, i;
    int abc;
    abc = fscanf( fi , "%hd %hd %hd\n" , &n , &l , &u );
    unsigned short data[2][n];
    n--;

    for(i = 0 ; i < n ; i++ )
        abc = fscanf( fi , "%hd " , &data[0][i] );
    abc = fscanf( fi , "%hd\n" , &data[0][n] );
    for(i = 0 ; i < n ; i++ )
        abc = fscanf( fi , "%hd " , &data[1][i] );
    abc = fscanf( fi , "%hd" , &data[1][n] );
    n++;
    fclose(fi);
    fi = fopen("secv3.out","wt");
    unsigned int sc, st;
    if( l == n ){
        sc = st = 0;
        for(i = 0 ; i < n ; i++ ){
            sc += data[0][i];
            st += data[1][i];
        }
        fprintf(fi,"%.2f", (1.0 * sc) / st );
    } else if ( u > 1 ){
        float val = 0;
        for( i = l ; i <= u ; i++ )
            getVal(n,data,0,n-1,&val,i);
        fprintf(fi,"%.2f", val );
    }
    fclose(fi);
    return 0;
}