Cod sursa(job #72510)

Utilizator M@2Te4iMatei Misarca M@2Te4i Data 14 iulie 2007 00:48:13
Problema Buline Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.19 kb
#include<stdio.h>
#include<stdlib.h>
#define val 400003

long n,inc,lung;
long max;
long a[val];

void citire()
{
	freopen("buline.in","r",stdin);
	scanf("%ld", &n);
	int w;
	for (long i=0; i<n; i++)
	{
		scanf("%ld%d", &a[i], &w);
		if (w==0)
			a[i]*=-1;
		a[i+n]=a[i];
	}
	fclose(stdin);
}

void prelucrare()
{
	long s=a[0],e;
	long w=0,q;
	max=-20000;
	inc=0;
	lung=1;
	for (long i=1; i<2*n-1; i++)
	    {
		e=i;
		if (e>n)
			e-=n;
		if (i-w+1>n)
			s-=a[w++];
		q=w+1;
		if (q>n)
			q-=n;
	    if ((a[i]>s+a[i]) || (a[i]==s+a[i] && e<q))
	        {
			s=a[i];
			w=i;
			}
		else s+=a[i];
		q=w+1;
		if (q>n)
			q-=n;
	    if (s>max && i-w+1<=n)
	       {
	       inc=q;
	       lung=i-w+1;
	       max=s;
	       }
	       else if (s==max && q<inc && i-w+1<=n)
		    {
		    inc=q;
		    lung=i-w+1;
		    }
		    else if (s==max && inc==q && lung>i-w+1 && i-w+1<=n)
			 lung=i-w+1;
	}
}

void printare()
{
	freopen("buline.out","w",stdout);
/*	++inc;
	if (inc>n)
       {
       inc-=n;       
       }*/
	printf("%ld %ld %ld",max,inc,lung);
	fclose(stdout);
}

int main()
{
	citire();
	prelucrare();
	printare();
	return 0;
}