Cod sursa(job #30975)

Utilizator andrei.12Andrei Parvu andrei.12 Data 15 martie 2007 13:08:49
Problema Buline Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.06 kb
using namespace std;
#include<stdio.h>
int main(){
	FILE*f=fopen("buline.in","r");
	FILE*g=fopen("buline.out","w");
	long i, suma, ga, t, nr, n, v[2][200000],sume[20000],w[20000], l[20000], m, pc, lung;
	fscanf(f,"%ld",&n);
	for (i=0;i<n;i++)
		fscanf(f,"%ld%ld",&v[0][i],&v[1][i]);
	if (n==1)
		fprintf(g,"%ld 1 1",v[0][0]);
	else {
	nr=0;
	ga=1;
	t=0;
	suma=0;
	pc=0;
	lung=0;
	while ((ga==0)||(nr<n)){
		if (suma>=0){
			ga=0;
			if (v[1][nr%n]==1) {suma+=v[0][nr%n]; sume[t]=suma; w[t]=pc; lung++; l[t]=lung; t++;}
			else {
				suma-=v[0][nr%n];
				sume[t]=suma;
				lung++;
				w[t]=pc;
				l[t]=lung;
				t++;
				if ((lung>=n)||(suma<0))
					ga=1;
			}
			nr++;
		}
		else{
			ga=1;
			suma=0;
			lung=0;
			pc=nr%n;
		}
	}
	m=sume[0];
	for (i=1;i<t;i++)
		if (sume[i]>m) { ga=i; m=sume[i];}
	if (m==0){
		m=v[0][0];
		for (i=0;i<n;i++)
			if (v[0][i]>m) {m=v[0][i]; ga=i};
		fprintf(g,"%ld %ld ",m,ga);
		fprintf(g,"1\n");
	}
	else {
	fprintf(g,"%ld %ld %ld",m,w[ga]+1,l[ga]);}
	}
	fclose(f);
	fclose(g);
	return 0;
}