Pagini recente » Cod sursa (job #1007304) | Cod sursa (job #2295218) | Cod sursa (job #656038) | Cod sursa (job #1429354) | Cod sursa (job #2698168)
#include <iostream>
#include <stdio.h>
#define NMAX 2000
using namespace std;
struct om {
int T, P;
};
om v[NMAX + 1];
void mysort(int beg, int en) {
int b, e;
om piv, aux;
b = beg; e = en; piv = v[(b + e) / 2];
while (v[b].T < piv.T)
b++;
while (v[e].T > piv.T)
e--;
while (b < e) {
aux = v[b]; v[b] = v[e]; v[e] = aux;
do b++; while (v[b].T < piv.T);
do e--; while (v[e].T > piv.T);
}
if (beg < e)
mysort(beg, e);
if (e + 1 < en)
mysort(e + 1, en);
}
int maxim(int a, int b) {
return a > b ? a : b;
}
int main() {
FILE *fin, *fout;
int n, c, i, maxprofit, profitcur, newprofit, pret, j, last_time;
fin = fopen("carnati.in", "r");
fscanf(fin, "%d%d", &n, &c);
for (i = 1; i <= n; i++)
fscanf(fin, "%d%d", &v[i].T, &v[i].P);
mysort(0, n - 1);
maxprofit = 0;
for (i = 1; i <= n; i++) {
pret = v[i].P;
profitcur = 0;
last_time = -1;
for (j = 1; j <= n; j++) {
if (v[j].P >= pret) {
newprofit = maxim(profitcur + pret - c * (v[j].T - last_time), pret - c);
last_time = v[j].T;
maxprofit = maxim(newprofit, maxprofit);
profitcur = newprofit;
}
}
}
fout = fopen("carnati.out", "w");
fprintf(fout, "%d", maxprofit);
fclose( fout );
return 0;
}