Cod sursa(job #585756)

Utilizator mihaipopa12Popa Mihai mihaipopa12 Data 30 aprilie 2011 11:39:02
Problema Fabrica Scor 20
Compilator cpp Status done
Runda Algoritmiada 2011, Runda Finală, Clasele 10-12 Marime 1.05 kb
#include<stdio.h>
#include<algorithm>

using namespace std;

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

int n,na,nb,i,j,tmax,p,c,L;
int A[50005],B[50005],T[50005];

struct heap{
	int init;
	int crt;
}H[50005],aux;

void urca(int x){
	
	c = x; p = x/2;
	
	while( p != 0 && H[p].crt > H[c].crt ){
		
		swap(H[p],H[c]);
		
		c = p; 
		p = p / 2;
	}
	
}

void coboara(int x){
	int y = 0;

	while (x != y)
	{
		y = x;
		if (y*2<=L && H[x].crt > H[2*y].crt) x = y*2;
		if (y*2+1<=L && H[x].crt > H[y*2+1].crt) x = y*2+1;
		swap(H[x],H[y]);
	}
}

int main () {
	
	fscanf(f,"%d %d %d",&n,&na,&nb);
	
	for ( i = 1 ; i <= na ; ++i ){
		fscanf(f,"%d",&A[i]);
		aux.init = aux.crt = A[i];
		H[++L] = aux;
		urca(L);
	}
	for ( i = 1 ; i <= nb ; ++i ){
		fscanf(f,"%d",&B[i]);
	}
	
	for ( i = 1 ; i <= n ; ++i ){
		tmax = H[1].crt > tmax ? H[1].crt : tmax;
		
		H[1].crt = H[1].crt + H[1].init;
		
		coboara(1);
		
	}
	
	fprintf(g,"%d 0\n",tmax);
	
	
	fclose(f);
	fclose(g);
	
	return 0;
}