Cod sursa(job #531844)

Utilizator roots4Irimia Alexandru Gabriel roots4 Data 10 februarie 2011 13:44:57
Problema Buline Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.16 kb
#include <fstream.h>
int N , nr , semn , ant , i , b , sum_max , inc , lun ,iMax , uMax , sum , sum_tot , max=-200000 , min=20000 , iMin , uMin , ant2 , c;
int main()
{
	ifstream f("buline.in");
	ofstream g("buline.out");
	f>>N;
	f>>nr>>semn;
	ant=nr;ant2=nr;b=1;c=1;
	if(semn==0){
		ant=0-ant;
		ant2=0-ant;
	}
	sum_tot=ant;
	for(i=2;i<=N;i++){
		f>>nr>>semn;
		if(semn==0){
			nr=-nr;
		}
		sum_tot+=nr;
		if(ant+nr>=nr){
			ant=ant+nr;			
		}
		else{
			ant=nr;
            b=i;
		}
		if(ant>max){
			max=ant;
			uMax=i;
			iMax=b;
		}
		if(ant2+nr<=nr){
			ant2=ant2+nr;			
		}
		else{
			ant2=nr;
            c=i;
		}
		if(ant2<min){
			min=ant2;
			uMin=i;
			iMin=c;
		}
	}
	
	
	
	if(sum_tot-min>max){
		sum_max=sum_tot-min;
		inc=uMin+1;
		lun=N-uMin+iMin-1;
	}
	else if (sum_tot-min<max){
		sum_max=max;
		inc=iMax;
		lun=uMax-iMax+1;
	} else {
		if (iMax > uMin+1) {
			inc = uMin+1;
			lun = uMax-iMax+1;
		} else
			if (iMax < uMin+1) {
				inc=iMax;
				lun=uMax-iMax+1;
			} else {
				if (N-uMin+iMin-1 < uMax-iMax+1)
					lun = N-uMin+iMin-1;
				else
					lun = uMax-iMax+1;
			}
	}
	g<<sum_max<<" "<<inc<<" "<<lun;
	f.close();
	g.close();
	return 0;
}