Cod sursa(job #437195)

Utilizator blubeeAna-Cristina Surdu blubee Data 9 aprilie 2010 14:24:13
Problema Gutui Scor 0
Compilator c Status done
Runda teme_upb Marime 1.62 kb
//Tema 1 PA
//Surdu Cristina 321CA

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

//sa folosesc qsort din stdlib la sortare!!!!!!!!!!1

int main ()
{
	FILE *fin = fopen ("gutui.in", "r");
	FILE *fout = fopen ("gutui.out", "w");
	int N, H, U;
	int i, j, aux;
	int greutate = 0; //greutatea totala pe care o poate cara Gigel
	fscanf (fin, "%d%d%d", &N, &H, &U);

	if (N < 1 || N > 100000)
		exit(1);
	
	int mat[N][2]; //pe prima coloana e inaltimea la care se afla gutuia, pe a doua coloana e greutatea gutuii
	
	for (i=0; i<N; i++)
		for (j=0; j<2; j++)
			fscanf (fin, "%d", &mat[i][j]);
	
	//ordonez gutuile in functie de inaltime, descrescator		
	for (i=0; i<N-1; i++)
		for (j=i; j<N; j++)
			if (mat[i][0] < mat[j][0])
			{
				aux = mat[i][0];
				mat[i][0] = mat[j][0];
				mat[j][0] = aux;
				
				aux = mat[i][1];
				mat[i][1] = mat[j][1];
				mat[j][1] = aux;
			}
			
	//daca 2 gutui au aproximativ aceeasi inaltime si greutati diferite, prima pe care o va alege Gigel o sa fie cea cu greutatea mai mare
	for (i=0; i<N-1; i++)
		for (j=i; j<N; j++)
			if ((mat[i][0] / 10) == (mat[j][0] / 10) && mat[i][1] < mat[j][1]) 
			{
				aux = mat[i][1];
				mat[i][1] = mat[j][1];
				mat[j][1] = aux;
				
				aux = mat[i][0];
				mat[i][0] = mat[j][0];
				mat[j][0] = aux;
			}
	
	//o sa ia gutuia de la inaltimea cea mai mare, care e mai mica decat H (ca de-aia le-am ordonat), cresc toate inaltimile cu U, se repeta procedeul pana cand nu mai are ce lua 
	for (i = 0; i < N; i++)
	{
		if (mat[i][0] <= H)
		{
			greutate += mat[i][1];
			for (j = 0; j < N; j++)
				mat[j][0] += U;
		}
	}
	
	fprintf (fout, "%d\n", greutate);
return 0;
}