Cod sursa(job #1510853)

Utilizator mirupetPetcan Miruna mirupet Data 25 octombrie 2015 18:06:14
Problema Buline Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.35 kb
#include<cstdio>
#define DIM 400001
#define SET(x) (x ? 1 : - 1)
using namespace std;

int N, X, Y, S, MAX;
int i, nr,finish, lung;
int v[DIM];

int main()
    {
        freopen("buline.in","r",stdin);
        freopen("buline.out","w",stdout);

        scanf("%d", &N);

        for (i = 1; i <= N; i++)
        {
            scanf("%d%d", &X, &Y);
            v[i] = v[i + N] = SET(Y) * X;
        }

        /*for (i = 1; i <= 2 * N; i++)
            printf("%d ", v[i]);
        printf("\n");*/

        for (i = 1; i <= N * 2; i++)
        {
            S += v[i];
            nr++;

            if (nr > N)
                S -= v[i - N], nr--;

            if (S > MAX && nr <= N)
            {
                MAX = S;
                finish = i;
                lung = nr;
            }

            if (S == MAX)
                    if (i - nr < finish - lung)
                    {
                        finish = i;
                        lung = nr;
                    }
                    else
                        if (i - nr == finish - lung && nr < lung)
                            lung  = nr;

            if (S < 0)
            {
                nr = 0;
                S = 0;
            }

           // printf("%d\n", S);

        }

        printf("%d %d %d", MAX, finish - lung + 1, lung);
    }