Pagini recente » Cod sursa (job #1760730) | Cod sursa (job #1556569) | Cod sursa (job #839925) | Cod sursa (job #2071646) | Cod sursa (job #2698743)
#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];
//pret[i] = pret[i] - c * timp[i];
}
quicksort( 0, n - 1 );
profit = -1;
t = 0;
for( i = 0; i < n; i++ ){
sum = pret[i];
//out<<sum<<'\n';
t = 0;
if( pret[0] >= sum ){
s[0] = sum;
t = timp[0];
}
else{
s[0] = 0;
t = 0;
}
for( j = 1; j < n; j++ ){
if( pret[j] >= sum){
if( s[ j - 1 ] >= 0 && j != 1 ){
s[j] = s[ j - 1 ] + sum - c * ( timp[j] - t );
}
else
s[j] = sum;
t = timp[j];
}
else
s[j] = s[ j - 1 ];
}
for( j = 0; j < n; j++ ){
//out<<s[j]<<" ";
if( profit < s[j] )
profit = s[j];
s[j] = 0;
}
//out<<'\n';
}
out<<profit - c;
return 0;
}