Cod sursa(job #467491)

Utilizator rurryRuxandra Nistor rurry Data 29 iunie 2010 01:03:38
Problema Subsecventa de suma maxima Scor 80
Compilator cpp Status done
Runda Arhiva educationala Marime 1.68 kb
#include <stdio.h>
#include <stdlib.h>
//#include <conio.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", &n);

    fscanf(fin, "%d", &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);
    //for(i = best_fst; i <= last; i++)
      //  fprintf(fout, "%d ", v[i]);
    fclose(fout);
  //  getch();
    return 0;
}