Cod sursa(job #2648435)

Utilizator LifeArgentToth-Gati Laszlo-Levente LifeArgent Data 10 septembrie 2020 19:57:26
Problema Subsecventa de suma maxima Scor 95
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.39 kb
#include <iostream>
#include <fstream>
#include <algorithm>

using namespace std;

void ssm2(int n,int tomb[],int &sum
         ,int &kezdindex,int &vegindex) {

    int *d = new int[n];
    d[0] = tomb[0];
    for(int i=1; i<n; i++) {
        d[i] = max(tomb[i],d[i-1]+tomb[i]);
    }
    sum = d[0], kezdindex = vegindex = 0;
    for(int i=1; i<n; i++) {
        if(sum < d[i]) {
            sum = d[i];
            vegindex = i;
        }
    }
    int akt = tomb[vegindex];
    for(kezdindex=vegindex; akt!=sum; kezdindex--) {
        akt += tomb[kezdindex-1];
    }

    delete[] d;
}



void ssm(int n,int tomb[],int &sum
         ,int &kezdindex,int &vegindex) {

    sum = tomb[0];
    kezdindex = vegindex = 0;
    int osszeg = 0;

    for(int i=0; i<n; i++) {
        for(int j=i; j<n; j++) {
            osszeg = osszeg + tomb[j];
            if(osszeg > sum) {
                sum = osszeg;
                kezdindex = i;
                vegindex = j;
            }
        }
        osszeg = 0;
    }
}

int main()
{
    int n, sum, kezdindex, vegindex;
    ifstream be("ssm.in");
    ofstream ki("ssm.out");
    be >> n;
    int* tomb = new int[n];
    for(int i=0; i<n; i++) {
        be >> tomb[i];
    }
    ssm2(n,tomb, sum, kezdindex, vegindex);
    ki << sum << " " << kezdindex+1
        << " " << vegindex+1 << endl;
    delete[] tomb;
}