Cod sursa(job #634225)

Utilizator ContraPunctContrapunct ContraPunct Data 15 noiembrie 2011 21:09:37
Problema Subsecventa de suma maxima Scor 20
Compilator cpp Status done
Runda Arhiva educationala Marime 1.31 kb
#include<fstream>
const int Nmax = 6000000;
using namespace std;

ifstream fin("ssm.in");
ofstream fout("ssm.out");

int indice_inceput,indice_sfarsit;
int x;
int suma;
int lungime;
int n;

void Sol()
{
	int i;
	fin>>n;
	indice_inceput = indice_sfarsit = 1;
	fin>>x;
	suma = x;
	
	int suma_partiala = x;
	int ind_inceput = 1;

	for( i=2;i<=n;++i)
	{

		/*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ă.*/

		fin>>x;
		
		if( suma_partiala + x >= x && x >0 )
		{
			suma_partiala = suma_partiala + x;
		}
		else

		if( suma_partiala + x >= x && x < 0 )
		{
			if(suma_partiala > suma)
			{
				indice_inceput = ind_inceput;
				indice_sfarsit = i-1;
				suma = suma_partiala;
			}	
			suma_partiala = suma_partiala + x;
		}
		else
		{
			if(suma_partiala > suma)
			{
				indice_inceput = ind_inceput;
				indice_sfarsit = i-1;
				suma = suma_partiala;
			}	
			ind_inceput = i;
			suma_partiala = x;
		}
	}

	if(suma_partiala > suma)
	{
		indice_inceput = ind_inceput;
		indice_sfarsit = i-1;
		suma = suma_partiala;
	}	

	fout<<suma<<" "<<indice_inceput<<" "<<indice_sfarsit<<"\n";
}

int main()
{
	Sol();
	fout.close();
	fin.close();
	return 0;
}