Cod sursa(job #1247447)

Utilizator Andru_Andru Felipe Zuniga Andru_ Data 22 octombrie 2014 20:44:48
Problema Subsecventa de suma maxima Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.42 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 Sumă {
    int valoare;
    int început;
    int sfârșit;
};

Sumă sumăMaximă(int șir[], int lungime) {
    int șirDeSume[lungime], sumăMax, pozSumăMax = 0, sumăMin, pozSumăMin = 0;
    
    șirDeSume[0] = șir[0];
    sumăMax = șirDeSume[0];
    sumăMin = șirDeSume[0];
    for (int i = 1; i < lungime - 1; i++) {
        șirDeSume[i] = șirDeSume[i - 1] + șir[i];
        
        if (sumăMax < șirDeSume[i]) {
            sumăMax = șirDeSume[i];
            pozSumăMax = i;
        }
        
        if (sumăMin > șirDeSume[i]) {
            sumăMin = șirDeSume[i];
            pozSumăMin = i;
        }
    }
    
    Sumă sumă;
    
    sumă.valoare = sumăMax - sumăMin;
    sumă.început = pozSumăMin + 2;
    sumă.sfârșit = pozSumăMax + 1;
    
    return sumă;
}

int main(int argc, const char * argv[]) {
    ifstream f;
    f.open("ssm.in");
    
    int n;
    f >> n;
    
    int șir[n];
    for (int i = 0; i < n - 1; i++) {
        f >> șir[i];
    }
    
    f.close();
    
    ofstream g;
    g.open("ssm.out");
    
    Sumă sumaMaximă = sumăMaximă(șir, n);
    
    g << sumaMaximă.valoare << " " << sumaMaximă.început << " " << sumaMaximă.sfârșit;
    
    g.close();
    return 0;
}