Cod sursa(job #53328)

Utilizator varuvasiTofan Vasile varuvasi Data 21 aprilie 2007 19:55:05
Problema Buline Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.44 kb
#include <stdio.h>
#define FOR(i, a, b) for (i = (a); i <= (b); i++)
#define MaxN 200033

int A[MaxN], N;

int sum, smin, s, sp, ep, lsol, spsol;

int main()
{
    int i, val, sgn;
    
    FILE *fin = fopen("buline.in", "rt");
    FILE *fout = fopen("buline.out", "wt");
    
    int albe = 0, negre = 0;
    
    fscanf(fin, "%d", &N);
    FOR (i, 1, N)
    {
        fscanf(fin, "%d %d", &val, &sgn);
        if (!sgn) val *= -1, negre = 1;
        else      albe = 1;
        A[i] = val;
        sum += A[i];
    }
    
    
    smin = 0, s = 0, sp = N;
    
    FOR(i, 1, N)
    {
        s += A[i];
        if (s < smin)
        {
            smin = s;
            ep = i;
            spsol = sp;
        }

        if (s > 0)
        {
            s = 0;
            sp = i + 1;
        }
    }
    
    sp = spsol;
    if (ep == N) spsol = 1;
    else         spsol = ep + 1;
    
    lsol = (N - spsol + 1) + (sp - 1);
    
    if (negre && !albe)
    {
        int j, min_val = A[1], pos_min = 1;
        FOR(j, 2, N)
            if (min_val < A[j]) min_val = A[j], pos_min = j;    
        fprintf(fout, "%d %d %d", min_val, pos_min, 1);
    }
    else
        if (!negre && albe)
        {
            fprintf(fout, "%d %d %d", sum, 1, N);
        }    
        else
            fprintf(fout, "%d %d %d", sum - smin, spsol, lsol);
    fclose(fin);
    fclose(fout);
    
    return 0;    
}