Pagini recente » Cod sursa (job #951339) | Cod sursa (job #2401578) | Cod sursa (job #26093) | Cod sursa (job #108476) | Cod sursa (job #2698760)
#include <iostream>
#include <fstream>
#include <algorithm>
using namespace std;
ifstream in("carnati.in");
ofstream out("carnati.out");
const int MAXN = 2000;
int timp[MAXN], pret[MAXN], s[MAXN];
void quicksort( int inf, int sup ){
int i, j, x, t;
i = inf;
j = sup;
x = timp[ ( i + j ) / 2 ];
while( i <= j ){
while( ( i < sup ) && ( timp[i] < x ) )i++;
while( ( j > inf ) && ( timp[j] > x ) )j--;
if( i <= j ){
swap( timp[i], timp[j] );
swap( pret[i], pret[j] );
i++;
j--;
}
}
if( j > inf ) quicksort( inf, j );
if( i <sup ) quicksort( i, sup );
}
int main()
{
int n, c, i, sum, profit, j, t;
in>>n>>c;
for( i = 0; i < n; i++ ){
in>>timp[i]>>pret[i];
}
quicksort( 0, n - 1 );
profit = -1;
t = 0;
for( i = 0; i < n; i++ ){
sum = pret[i];
t = 0;
if( pret[0] >= sum )
s[0] = sum;
else
s[0] = 0;
for( j = 1; j < n; j++ ){
if( s[ j - 1 ] - c * ( timp[j] - timp[ j - 1 ] ) > 0 ){
s[j] = s[ j - 1 ] - c * ( timp[j] - timp[ j - 1 ] );
}
else
s[j] = 0;
if( pret[j] >= sum )
s[j] = s[j] + sum;
}
for( j = 0; j < n; j++ ){
if( profit < s[j] )
profit = s[j];
s[j] = 0;
}
}
out<<profit - c;
return 0;
}