Pagini recente » Cod sursa (job #2596250) | Rating bejenaru andreea (andreeabejenaru) | Cod sursa (job #1309485) | Istoria paginii runda/oji_go_10_2/clasament | Cod sursa (job #440715)
Cod sursa(job #440715)
#include <stdio.h>
#include <stdlib.h>
typedef struct node
{
long g;
struct node *next;
} nod;
void add( nod **p, long k)
{
nod *q, *r;
q=*p;
if( k> q->g )
{
q=(nod*) malloc ( sizeof( nod ));
q->g=k;
q->next=*p;
*p=q;
}
else
{
while ( q->next !=NULL )
{
if( k > q->next->g ) break;
q=q->next;
}
r=(nod*) malloc ( sizeof ( nod));
r->g=k;
r->next=q->next;
q->next=r;
}
}
int main()
{
long n, h, u,i, maxg=0, poz,j, gh, gg, rang, rangmax=0, max;
// gutuie g[100001];
nod* q[2000];
nod *p, *k;
FILE *f = fopen( "gutui.in", "rt" );
FILE *out = fopen ( "gutui.out", "wt");
fscanf(f, "%li %li %li", &n, &h, &u);
for( i=0; i<n;i++ )
{
fscanf (f, "%li %li", &gh, &gg );
rang= (h- gh )/u;
if ( q[rang] == NULL )
{
q[rang]=(nod *) malloc (sizeof (nod) );
q[rang]->next=NULL;
q[rang]->g=gg;
}
else add( &q[rang] , gg);
if( rangmax < rang) rangmax=rang;
}
rangmax++;
/*
for( i=0;i<rangmax;i++ )
{
k= q[i];
printf("\n rang %li\n", i);
while( k!=NULL)
{
printf("%li ", k->g);
k=k->next;
}
}
*/
for ( i=rangmax-1 ; i>=0 ; i-- )
{
max=0;
poz=-1;
for ( j=rangmax-1; j>= i; j-- )
if( q[j]!= NULL )
if( max < q[j]->g )
{
max=q[j]->g;
poz=j;
}
maxg+=max;
if( poz != -1 ) q[poz]=q[poz]->next;
}
fprintf( out, "%li", maxg);
// getch();
return 0;
}