Pagini recente » Cod sursa (job #2517806) | Cod sursa (job #1068416) | Cod sursa (job #2450361) | Cod sursa (job #2245722) | Cod sursa (job #436989)
Cod sursa(job #436989)
#include<stdio.h>
#include<stdlib.h>
#include<limits.h>
int n;
int N;
int H;
int U;
typedef struct Gutui {
int lvl;
int nr;
int inaltime;
int greutate;
} Gutui;
struct Gutui g[100001];
void write(int x) {
FILE * g = fopen("gutui.out", "w");
fprintf(g, "%d", x);
}
void sort() {
int i, j, aux, aux2;
for (i = 1; i <= N - 1; i++)
for (j = i + 1; j <= N; j++)
if (g[i].lvl > g[j].lvl) {
aux = g[i].greutate;
g[i].greutate = g[j].greutate;
g[j].greutate = aux;
aux = g[i].inaltime;
g[i].inaltime = g[j].inaltime;
g[j].inaltime = aux;
aux = g[i].lvl;
g[i].lvl = g[j].lvl;
g[j].lvl = aux;
}
}
void gutui() {
int i, j, k, aux, count;
int r, rest, suma, level;
if(( rest = H % U ) == 0) r = U;
else r = rest;
k = 0;
for( i = 1; i <= N; i ++ ) {
for( j = 1; j <= r; j ++) {
if((g[i].inaltime <= (H - (j - 1) * U)) && (g[i].inaltime >= ( H - j * U + 1)))
g[i].lvl = j;
}
}
sort();
level = g[1].lvl - 1;
if( level != 1 )
for( i = 1; i <= N; i ++ )
g[i].lvl = g[i].lvl - level;
g[N].nr = 1;
for (i = N - 1; i >= 1; i --)
if( g[i+1].lvl == g[i].lvl )
g[i].nr = g[i + 1].nr + 1;
else
g[i].nr = 1;
for (i = 1; i <= N - 1; i++)
for (j = i + 1; j <= N; j++)
if (g[i].lvl == g[j].lvl && g[i].greutate < g[j].greutate) {
aux = g[i].lvl;
g[i].lvl = g[j].lvl;
g[j].lvl = aux;
aux = g[i].greutate;
g[i].greutate = g[j].greutate;
g[j].greutate = aux;
aux = g[i].inaltime;
g[i].inaltime = g[j].inaltime;
g[j].inaltime = aux;
}
k = 1;
count = 0;
suma = 0;
while( k <= N ) {
if( g[k].lvl > count )
if( g[k].greutate >= g[k + g[k].nr + g[k + 1].nr - 1 ].greutate ) {
suma = suma + g[k].greutate;
k = k + 1;
count = count + 1;
}
else
k = k + g[k].nr;
else
k = k + g[k].nr;
}
for (i = 1; i <= N; i++) {
printf("%d ", g[i].lvl);
printf("%d ", g[i].nr);
printf("%d ", g[i].inaltime);
printf("%d", g[i].greutate);
printf("\n");
}
write(suma);
}
int main() {
FILE * f = fopen("gutui.in", "r");
int i;
fscanf(f, "%d", &N);
fscanf(f, "%d", &H);
fscanf(f, "%d", &U);
for (i = 1; i <= N; i++) {
fscanf(f, "%d", &g[i].inaltime);
fscanf(f, "%d", &g[i].greutate);
}
gutui();
return 0;
}