Pagini recente » Cod sursa (job #2189513) | Cod sursa (job #2437777) | Cod sursa (job #3130062) | Cod sursa (job #2118663) | Cod sursa (job #467497)
Cod sursa(job #467497)
#include <stdio.h>
#include <stdlib.h>
int main()
{
int n, x, sum, i, best_sum, fst, last, best_fst;
best_sum = -int(2e9);
//se citesc datele
FILE * fin = fopen ("ssm.in", "r");
fscanf(fin, "%d %d", &n, &x);
//suma initiala e v[0]
sum = x;
fst = 0;
last = 0;
//se parcurge vectorul
for(i = 1; i < n; i++)
{
fscanf(fin, "%d", &x);
//daca suma e mai mica decat 0 => se porneste subsirul
//primul indice = i
//suma = x (cea mai buna suma e in best_sum si dintr-o suma negativa n-ai decat cum sa scazi..
//daca x-ul e pozitiv suma + x < x => vrem sa retinem suma
//daca x=ul e negativ suma + x < x (ca e x - ceva pozitiv, suma fiind negativa)
//luati pe un exemplu.. si unde setati fst deschideti interval
if (sum < 0)
{
fst = i;
sum = x;
}
else
//altfel - se adauga x la suma
sum += x;
//daca suma curenta e mai buna decat cea mai buna de pana acum - se retine
if(best_sum < sum)
{
best_sum = sum;
best_fst = fst;
last = i;
}
}
fclose(fin);
FILE *fout = fopen("ssm.out", "w");
fprintf(fout, "%d %d %d\n", best_sum, best_fst+ 1, last + 1);
fclose(fout);
return 0;
}