Cod sursa(job #436344)

Utilizator encyEnciu Bogdan ency Data 8 aprilie 2010 15:14:16
Problema Gutui Scor 0
Compilator c Status done
Runda teme_upb Marime 1.46 kb
#include <stdio.h>
#include <stdlib.h>
int sort(const void *x, const void *y) {
  return (*(int*)x - *(int*)y);
}
void sorta(unsigned long int a[][3],unsigned long int n){
qsort(a,n,sizeof(unsigned long int[3]),sort);
}
unsigned long int max(unsigned long int a[][2],unsigned long int n,unsigned long int x){
	unsigned long int i,maxim=0;
	for(i=0;i<n;i++){
		if (a[i][0]==x)
			if(maxim<a[i][1])
				maxim=a[i][1];
		}
	return maxim;
}

unsigned long int calcul3(unsigned long int c[][3],unsigned long int n,unsigned long int h,unsigned long int u){
	unsigned long int a[n][2];
	unsigned long int i,k=100000000;
	unsigned long int x=0,m=0,q=0;
	sorta(c,n);
	for(i=0;i<n;i++)
	 if(c[i][1]<k)
		k=c[i][1];
	for(i=0;i<n;i++) {
		a[i][0]=c[n-i-1][0];
		a[i][1]=c[n-i-1][1];
		}
	//printf("k=%ld\n",k);
	x=h/u-(k-1)/u;
	//printf("x=%ld\n",x);
	for(i=0;i<n;i++) 
		a[i][1]=h/u-(a[i][1]-1)/u;
	for(i=0;i<x;i++) {
		 
		 if(q>=a[i][1]) 
                     x++;
		       else  { 
			m=m+a[i][0];
                           q++;
			//printf("m=%ld ,%ld  q=%ld\n <%ld",m,a[i][0],q,a[i][1]);
			}
		}
	return m;
}
int main(){
	 unsigned long int c[100000][3];
	 unsigned long int i,n,h,gr,j,u;
         freopen("gutui.in", "r", stdin);
         freopen("gutui.out", "w", stdout); 
         scanf("%ld",&n);
	 scanf("%ld",&h);
	 scanf("%ld",&u);
 	 for (i=0;i<n;i++) { 
     	 		scanf("%ld",&c[i][1]);
			scanf("%ld",&c[i][0]);
			c[i][2]=0;
	}
	gr=calcul3(c,n,h,u);
	printf("%ld",gr);
	return 0;
}