Cod sursa(job #541336)

Utilizator andreioneaAndrei Onea andreionea Data 25 februarie 2011 00:36:32
Problema Subsecventa de suma maxima Scor 90
Compilator c Status done
Runda Arhiva educationala Marime 0.77 kb
#include<stdio.h>
#include<limits.h>
#define BUF_SIZE 42000
void read(char *filename, int *n, int **v)
{
	FILE *f = fopen(filename,"rb");
	int i;
	char *buf = (char*)malloc(BUF_SIZE);
	setbuf(f,buf);
	fscanf(f,"%d",n);
	*v = (int*) malloc(*n * sizeof(int));
	for(i = 0; i< *n; ++i)
		fscanf(f,"%d",(*v)+i);	
	fclose(f);
	free(buf);
}

int main()
{
	int n, *v;
	int i;
	int start, end, sum, sumc = 0, st = 0;
	start = end;
	FILE *f = fopen("ssm.out","w");
	read("ssm.in",&n,&v);
	sum = *v;
	for(i = 0; i<n; ++i){
		sumc += v[i];
		if(sumc > sum){
			sum = sumc;
			start = st;
			end = i;
		}
		else if(sumc < 0){
			st = i+1;
			sumc = 0;
		}
	}
	fprintf(f,"%d %d %d\n",sum, start+1, end+1);
	fflush(stdout);
	fclose(f);
	free(v);
	return 0;
}