Pagini recente » Cod sursa (job #1586268) | Cod sursa (job #974407) | Cod sursa (job #2610216) | Cod sursa (job #2980441) | Cod sursa (job #2717570)
// 80 puncte
// probabil gresesc asta:
// Dacă există mai mult subsecvenţe candidate la soluţie,
// atunci se va tipări cea cu indicele de început cel mai mic, iar în caz de
// egalitate cea mai scurtă.
#include <fstream>
#include <iostream>
using namespace std;
int main() {
ifstream fin("ssm.in");
ofstream fout("ssm.out");
long long n;
fin >> n;
long long x, sumaMax, sumaCurenta, indiceInceput = 1, indiceSfarsit = 1,
indiceDeInceputAuxiliar;
fin >> x;
sumaMax = x;
sumaCurenta = x;
for (long long i = 2; i <= n; i++) {
fin >> x;
if (sumaCurenta + x >= x) { // >= nu >
sumaCurenta += x;
} else {
// sumaMax = x; aici e o greseala
sumaCurenta = x;
// indiceInceput = i; aici e greseala, trebuie o variabila separata
indiceDeInceputAuxiliar = i;
}
if (sumaCurenta > sumaMax) {
sumaMax = sumaCurenta;
indiceSfarsit = i;
indiceInceput = indiceDeInceputAuxiliar;
}
}
fout << sumaMax << " " << indiceInceput << " " << indiceSfarsit;
return 0;
}