Cod sursa(job #1537475)

Utilizator DanielRusuDaniel Rusu DanielRusu Data 27 noiembrie 2015 13:53:45
Problema Secventa 3 Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.34 kb
#include <cstdio>
#include <iostream>

using namespace std;

#define DIM 30005

FILE *fin = fopen("secv3.in","r");
FILE *fout = fopen("secv3.out","w");

int N, L, U, A[DIM], B[DIM], answer;

void Read();
void Write();
void Solve();
void Debug();

int main() {
    Read();
    Solve();
    Write();

    return 0;
}

void Read() {
    fscanf(fin, "%d %d %d\n", &N, &L, &U);

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

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

    fclose(fin);
}

void Write() {
    fprintf(fout, "%d", answer / 100);

    if((answer / 10) % 10 == 0) {
        fprintf(fout, ".0%d", answer % 10);
    }
    else {
        fprintf(fout, ".%d", answer % 100);
    }

    fclose(fout);
}

void Solve() {
    int ASI, BSI, AS, BS;

    ASI = BSI = AS = BS = 0;

    for(int i = 1; i < L; ++i) {
        ASI += A[i];
        BSI += B[i];
    }

    for(int lg = L; lg <= U; ++lg) {
        AS += ASI + A[lg];
        BS += BSI + B[lg];

        answer = max(answer, (AS * 100) / BS);

        for(int i = lg + 1; i <= N; ++i) {
            AS += A[i] - A[i - lg];
            BS += B[i] - B[i - lg];

            answer = max(answer, (AS * 100) / BS);
        }

        ASI += A[lg];
        BSI += B[lg];
    }
}