Cod sursa(job #1135109)

Utilizator BrandonChris Luntraru Brandon Data 7 martie 2014 12:28:19
Problema Buline Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.5 kb
#include <cstdio>
using namespace std;
int v[200001];
int main()
{
    int n, st, dr, stmin, dr0, s, s0, smax = 0, p, l, l0, l_smax, asn;
    freopen("buline.in", "r", stdin);
    freopen("buline.out", "w", stdout);
    scanf("%d", &n);
    for(p = 1; p <= n; ++p)
    {
        scanf("%d%d", &v[p], &asn);
        if(asn == 0)
            v[p] = -v[p];
    }
    for(p = 1; p <= n; ++p)
    {
        label0:
        if(v[p] > 0)
            st = p;
        else
        {
            ++p;
            goto label0;
        }
        //trebuie ca secventa de '+'uri dintre doua '-'uri sa fie mai mare ca ultimele nre scazute
        s = 0;
        l = 0;
        dr = st;
        do
        {
            s += v[dr];
            ++l;
            ++dr;
            if(dr == n+1)
                dr = 1;
        }while(dr != st && v[dr] > 0);
        label:
        s0 = 0;
        l0 = 0;
        if(v[dr] < 0)
        {
            dr0 = dr;
            do
            {
                s0 += v[dr0];
                ++l0;
                ++dr0;
            }while(v[dr0] > 0 && dr0 < st);
        }
        if(s0 > 0)
        {
            dr = dr0;
            s += s0;
            l += l0;
            goto label;
        }
        else
        {
            if(s > smax)
            {
                l_smax = l;
                smax = s;
                stmin = st;
            }
        }
    }
    printf("%d %d %d\n", smax, stmin, l_smax);
    return 0;
}