Cod sursa(job #1247490)

Utilizator Andru_Andru Felipe Zuniga Andru_ Data 22 octombrie 2014 21:26:06
Problema Subsecventa de suma maxima Scor 45
Compilator cpp Status done
Runda Arhiva educationala Marime 1.41 kb
//
//  main.cpp
//  ssm
//
//  Created by Andru Zuniga on 22.10.2014.
//  Copyright (c) 2014 Zuniga Andru Felipe. All rights reserved.
//

#include <fstream>

using namespace std;

struct Suma {
    int valoare;
    int inceput;
    int sfarsit;
};

Suma sumaMaxima(int sir[], int lungime) {
    int sirDeSume[lungime], sumaMax, sumaMin, pozSumaMax = 0, pozSumaMin = 0;
    
    sirDeSume[0] = sir[0];
    sumaMax = sirDeSume[0];
    sumaMin = sirDeSume[0];
    for (int i = 1; i < lungime; i++) {
        sirDeSume[i] = sirDeSume[i - 1] + sir[i];
    }
    
    for (int i = lungime - 1; i >= 1; i--) {
        if (sumaMax < sirDeSume[i]) {
            sumaMax = sirDeSume[i];
            pozSumaMax = i;
        }
        
        if (sumaMin > sirDeSume[i]) {
            sumaMin = sirDeSume[i];
            pozSumaMin = i;
        }
    }
    
    Suma suma;
    
    suma.valoare = sumaMax - sumaMin;
    suma.inceput = pozSumaMin < pozSumaMax ? pozSumaMin + 2 : 1;
    suma.sfarsit = pozSumaMax + 1;
    
    return suma;
}

int main(int argc, const char * argv[]) {
    ifstream f;
    f.open("ssm.in");
    
    int n;
    f >> n;
    
    int sir[n];
    for (int i = 0; i < n; i++) {
        f >> sir[i];
    }
    
    f.close();
    
    ofstream g;
    g.open("ssm.out");
    
    Suma sumaMax = sumaMaxima(sir, n);
    
    g << sumaMax.valoare << " " << sumaMax.inceput << " " << sumaMax.sfarsit;
    
    g.close();
    return 0;
}