Cod sursa(job #434114)

Utilizator IgrecCorina Popescu Igrec Data 5 aprilie 2010 01:13:24
Problema Gutui Scor 10
Compilator cpp Status done
Runda teme_upb Marime 1.03 kb
#include <stdio.h>
#include <stdlib.h>

#define NMAX 100000

long int minim (long int v[NMAX], long int i, long int j) {

	/*long int a, b, m;

	if (i == j) return i;
	if (v[i] == 0) return i;
	if (v[j] == 0) return j;
	m = (i+j)/2;
	a = minim (v, i, m);
	b = minim (v, m+1, j);
	return (v[a] > v[b]) ? b : a;*/

	long int k, poz = j;
	for (k = j-1; k>=0; k--) {
		if (v[k] == 0) return k;
		if (v[k] < v[poz])
			poz = k;
	}
	return poz;

} 

int main () {

FILE *f, *g;
long int n, hmax, u, h, gr, s=0, i, j, k, v[NMAX];


f = fopen ("gutui.in", "r");
g = fopen ("gutui.out", "w");

fscanf (f, "%ld", &n);
fscanf (f, "%ld", &hmax);
fscanf (f, "%ld", &u);

for (i=1; i<=n; i++) {
	printf ("\n");
	for (int kk = 0; kk<n ; kk++)
		printf ("%ld ", v[kk]);
	fscanf (f, "%ld", &h);
	fscanf (f, "%ld", &gr);
	j = (hmax-h)/u;
	if (v[j] == 0) {
		v[j] = gr;
		s +=gr;
	}
	else {
		k = minim (v, 0, j);
		if (gr > v[k]) {
			s = s+gr-v[k];
			v[k]=gr;
		} 
	}
}

printf ("\n");
	for (int kk = 0; kk<n ; kk++)
		printf ("%ld ", v[kk]);

fprintf (g, "%ld", s);

}