Pagini recente » Cod sursa (job #723965) | Cod sursa (job #579445) | Cod sursa (job #893284) | Cod sursa (job #615931) | Cod sursa (job #629722)
Cod sursa(job #629722)
#include <stdio.h>
int main (void)
{
FILE *f = fopen ("ssm.in", "rt");
FILE *g = fopen ("ssm.out", "wt");
int N;
int *vec, *st, *dr;
bool *take;
fscanf(f,"%d",&N);
vec = new int [N];
for (int i = 0 ; i < N ; i ++)
fscanf(f, "%d", &vec[i]);
int maxSum = -999999;
int poz = 0,start,end;
int prev = vec[0];
for(int i = 1 ; i < N ; i ++)
{
if(prev < 0)
{
prev = vec[i];
poz = i;
}
else
{
prev += + vec[i];
if (maxSum < prev)
{
maxSum = prev;
end = i;
start = poz;
}
}
}
fprintf(g, "%d %d %d\n", maxSum, start + 1, end + 1);
// PRINT(dr,N);
// cin.get();
/*
st[N - 1] = vec[N - 1];
for (int i = N - 2 ; i >=0 ; i --)
st[i] = st[i + 1] + vec[i];
take[0] = vec[0] >= 0;
take[N - 1] = vec[N - 1] >= 0;
for (int i = 1 ; i < N - 1; i ++)
if (dr[i - 1] <= dr[i + 1] && st[i - 1] >= st[i + 1] || vec[i] >= 0)
take[i] = true;
else
take[i] = false;
int maxIndex = 0;
int maxEnd = 0;
int maxSum = 0;
for (int i = 0 ; i < N ; i ++)
{
int sum = 0;
int index = i;
while (i < N && take[i])
{
sum += vec[i];
i ++;
}
if (sum > maxSum)
{
maxSum = sum;
maxIndex = index + 1;
maxEnd = i;
}
}
fprintf(g, "%d %d %d\n", maxSum, maxIndex, maxEnd);
PRINT(vec, N);
PRINT(st, N);
PRINT(dr, N);
PRINT(take, N);
*/
// cin.get();
return 0;
}