Cod sursa(job #2910130)

Utilizator radu.seitanSeitan Radu-Catalin radu.seitan Data 18 iunie 2022 16:00:45
Problema Subsecventa de suma maxima Scor 85
Compilator c-64 Status done
Runda Arhiva educationala Marime 1.09 kb
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

#define Max(a, b)  ((a) > (b) ? (a) : (b))

#define maxN 6000000

int S[maxN], N;

int main()
{
	FILE *ssm_in, *ssm_out;
	int i, start, stop, index, sum, best_sum;

	ssm_in = fopen("ssm.in", "r");
	ssm_out = fopen("ssm.out", "w");

	// Citirea din fisier
	fscanf(ssm_in, "%d\n", &N);
	if (N < 1 || N > maxN) {
		printf("\nVOLUMUL DE DATE NU SE AFLA IN LIMITELE IMPUSE\n");
		exit(0);
	}
	for (i = 1; i <= N; i++)
		fscanf(ssm_in, "%d ", &S[i]);

	sum = 0;
	best_sum = 1 << 31; // Max neg int value
	index = 1;

	for (i = 1; i <= N; i++) {
		if (sum < 0) { // Daca suma subsirului este negativa atunci vom sari peste ea
			sum = S[i];
			//printf("\n[%d]new sum = %d",i, sum);
			index = i;
		}
		else {
			sum += S[i];
			//printf("\n[%d] sum = %d",i, sum);
		}
		
		if (best_sum < sum) {
			//printf("\n[%d]best sum: %d; %d - %d",i, sum, index, i);
			best_sum = sum; 
			start = index; 
			stop = i;
		}
	}
	
	fprintf(ssm_out, "%d %d %d", best_sum, start, stop);

	fclose(ssm_in);
	fclose(ssm_out);
	return 0;
}