Pagini recente » Cod sursa (job #1669250) | Cod sursa (job #652163) | Cod sursa (job #26783) | Cod sursa (job #734105) | Cod sursa (job #154510)
Cod sursa(job #154510)
#include<stdio.h>
#include<malloc.h>
#define fin "secv2.in"
#define fout "secv2.out"
int N,K,Secv[50001];
int RezInceput,RezSfarsit;
long RezSuma = 0;
void citire()
{
int i;
FILE *f=fopen(fin,"r");
fscanf(f,"%d%d",&N,&K);
for(i = 1; i <= N; i++)
fscanf(f,"%d",Secv + i);
fclose(f);
}
void solutie()
{
int SumTemp, InceputTemp, SfarsitTemp;
int TabelPN[3][50001], IndexTabel, IndexTemp;
int i,j;
SumTemp = 0;
IndexTabel = 1;
for(i = 1; i <= N; i++)
{
TabelPN [0] [IndexTabel++] = Secv [i];
TabelPN [1] [IndexTabel - 1] = i;
j = i + 1;
if(Secv [i] >= 0)
{
while(Secv [j] >= 0)
{
TabelPN [0] [IndexTabel] += Secv [j];
j++;
}
}
else
{
while(Secv [j] < 0)
{
TabelPN [0] [IndexTabel] += Secv [j];
j++;
}
}
TabelPN [2] [IndexTabel - 1] = j - 1;
}
IndexTabel--;
int t;
for(i = 1; i <= IndexTabel; i++)
{
IndexTemp = i;
SumTemp = TabelPN [0] [IndexTemp];
InceputTemp = TabelPN [1] [IndexTemp];
t = 1;
while(t)
{
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) ||
( SfarsitTemp < K ))
{
SumTemp += TabelPN [0] [++ IndexTemp];
SumTemp += TabelPN [0] [++ IndexTemp];
}
else t = 0;
}
if(SumTemp > RezSuma)
{
RezSuma = SumTemp;
RezInceput = InceputTemp;
RezSfarsit = SfarsitTemp;
}
}
}
void afisare()
{
FILE *f=fopen(fout,"w");
fprintf(f,"%d %d %ld", RezInceput, RezSfarsit, RezSuma);
fclose(f);
}
int main()
{
citire();
solutie();
afisare();
return 0;
}