Pagini recente » Clasamentul arhivei de probleme | Borderou de evaluare (job #3150293) | Borderou de evaluare (job #2247240) | Clasamentul arhivei de probleme | Cod sursa (job #439007)
Cod sursa(job #439007)
#include <stdio.h>
#include <stdlib.h>
typedef struct{
int a,b;
} gutuie;
int comp(const void *a, const void *b){
gutuie x=*(gutuie*)a;
gutuie y=*(gutuie*)b;
if(x.a>y.a) return -1;
if(x.a==y.a) return (x.b-y.b);
return 1;
}
int main(){
int i,n,k,h,p,u,v[100000],max=0,aux;
gutuie x[100000];
FILE *f = fopen("gutui.in","rt");
fscanf(f,"%i %i %i\n",&n,&h,&u);
for(i=0;i<n;i++)
{
fscanf(f,"%i %i\n",&x[i].a,&x[i].b);
if(u!=0)
if(x[i].a>h) x[i].a=-1;
else x[i].a=(h-x[i].a)/u;
}
close(f);
qsort(&x,n,sizeof(gutuie),comp);
/* for(i=0;i<n;i++)
printf("%i %i\n",x[i].a,x[i].b);*/
if(u==0)
for(i=n-1;i>=0;i--)
{
if(x[i].a>h) {
f = fopen("gutui.out","wt");
fprintf(f,"%i",max);
close(f);
return 0;
}
max+=x[i].b;
}
v[0]=x[0].b;
for(i=1;i<n;i++)
{
if(x[i].a<0) break;
p=1;
v[i]=x[i].b;
for(k=i-1;k>=0;k--)
{
if(x[k].a>=p) {
v[i]=v[i]+x[k].b;
p++;
}
}
if(v[i]>max) max=v[i];
}
if (max==-1) max=0;
for (i=0;i<n;i++){
printf("%i ",v[i]);
}
/* printf("\n%i\n",max);*/
f = fopen("gutui.out","wt");
fprintf(f,"%i",max);
close(f);
/* getch();*/
return 0;
}