Cod sursa(job #1326513)

Utilizator BLz0rDospra Cristian BLz0r Data 25 ianuarie 2015 16:03:23
Problema Subsecventa de suma maxima Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.06 kb
#include <cstdio>
#include <algorithm>
using namespace std;

#define Nmax 1002
#define inf 0x3f3f3f3f

FILE *f = fopen ("minim.in","r");
FILE *g = fopen ("minim.out","w");

int v[Nmax];
bool used[Nmax];


int main(){
	int N, st, dr, stm, drm, smin, elem, best;
	
	fscanf (f,"%d",&N);
	
	elem = N;
	
	for (int i = 1; i <= N; ++i)
		fscanf (f,"%d",&v[i]);
	
	while (elem){
		st = 1;
		best = inf;
		smin = inf;
		
		for (int i = 1 ; i <= N; ++i){
			if (used[i]){
				best = inf;
				st = i + 1;
				continue;
			}
			
			if (best + v[i] < v[i]){
				best += v[i];
				dr = i;
				if (best < smin || (best == smin && dr - st < drm - stm) ){
					smin = best;
					stm = st;
					drm = dr;
				}
			}
			else{
				best = v[i];
				st = i;
				dr = i;
				if (best < smin || (best == smin && dr - st < drm - stm) ){
					smin = best;
					stm = st;
					drm = dr;
				}
			}
		}
		
		elem -= drm - stm + 1;
		
		for (int i = stm; i <= drm; ++i)
			used[i] = 1;
		
		fprintf (g,"%d %d %d\n",smin,stm,drm);
	}
	
	
	return 0;	
}