Pagini recente » Cod sursa (job #434939) | Cod sursa (job #1344506) | Cod sursa (job #2049914) | Cod sursa (job #2428446) | Cod sursa (job #151194)
Cod sursa(job #151194)
#include<stdio.h>
#include<malloc.h>
#define fin "secv2.in"
#define fout "secv2.out"
const int NMax=50001;
int N,K,Secv[NMax];
int RezInceput,RezSfarsit;
long RezSuma;
void citire()
{
FILE *f=fopen(fin,"r");
fscanf(f,"%d%d",&N,&K);
for(int i = 1; i <= N; i++)
fscanf(f,"%d",Secv + i);
fclose(f);
}
void solutie()
{
int SumTemp, InceputTemp, SfarsitTemp, SumTempMax, InceputTempMax, SfarsitTempMax;
int TabelPN[3][NMax], IndexTabel, IndexTemp;
int i,j;
SumTemp = 0;
IndexTabel = 1;
for(i = 1; i <= N; i++)
{
TabelPN [0] [IndexTabel++] = Secv [i];
if(Secv [i] >= 0)
{
TabelPN [1] [IndexTabel - 1] = i;
j = i + 1;
while(Secv [j] >= 0)
{
TabelPN [0] [IndexTabel] += Secv [j];
j++;
}
TabelPN [2] [IndexTabel - 1] = j - 1;
}
else
{
TabelPN [1] [IndexTabel - 1] = i;
j = i + 1;
while(Secv [j] < 0)
{
TabelPN [0] [IndexTabel] += Secv [j];
j++;
}
TabelPN [2] [IndexTabel - 1] = j - 1;
}
}
IndexTabel--;
for(i = 1; i <= IndexTabel; i++)
{
IndexTemp = i;
SumTemp = TabelPN [0] [IndexTemp];
InceputTemp = TabelPN [1] [IndexTemp];
while(1)
{
SfarsitTemp = TabelPN [2] [IndexTemp];
if ( TabelPN [0] [IndexTemp + 1] >= 0)
{
SumTemp += TabelPN [0] [++ IndexTemp];
}
else if ( TabelPN [0] [IndexTemp + 1] + TabelPN [0] [IndexTemp + 2] >= 0 && IndexTemp + 2 <= IndexTabel)
{
SumTemp += TabelPN [0] [++ IndexTemp];
SumTemp += TabelPN [0] [++ IndexTemp];
}
else break;
}
if(SumTemp > SumTempMax)
{
SumTempMax = SumTemp;
InceputTempMax = InceputTemp;
SfarsitTempMax = SfarsitTemp;
}
}
/*
for(i = 1; i <= N; i++)
{
NSecvTemp = N - i + 1;
SecvTemp = (int *) malloc (NSecvTemp * sizeof(int));
InceputTemp = i;
SecvTemp [i] = Secv [i];
for(j = i+1; j <= N; j++)
{
SecvTemp [j] = SecvTemp [j-1] + Secv [j];
if(SecvTemp [j] > SumTemp)
{
SumTemp = SecvTemp [j];
SfarsitTemp = j;
}
}
if(SumTemp > SumTempMax)
{
SumTempMax = SumTemp;
InceputTempMax = InceputTemp;
SfarsitTempMax = SfarsitTemp;
}
SecvTemp = NULL;
}*/
RezSuma = SumTempMax;
RezInceput = InceputTempMax;
RezSfarsit = SfarsitTempMax;
}
void afisare()
{
FILE *f=fopen(fout,"w");
fprintf(f,"%d %d %ld", RezInceput, RezSfarsit, RezSuma);
fclose(f);
}
int main()
{
citire();
solutie();
afisare();
return 0;
}