Cod sursa(job #2707874)

Utilizator andrei_marciucMarciuc Andrei andrei_marciuc Data 17 februarie 2021 21:13:45
Problema Carnati Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.03 kb
#include <algorithm>
#include <stdio.h>
#define MAX 2001
#define INF -1
int n, k, maxx = INF;
struct Andrei{
    int t, p;
} v[ MAX ];

bool cmp( const Andrei &A, const Andrei &B ){
    return ( A.t < B.t );
}

int my_max( int a, int b ){
    if( a >= b )
        return a;
    return b;
}

int main()
{
    FILE *fin = fopen( "carnati.in", "r" );
    fscanf( fin, "%d %d", &n, &k );
    for( int i = 1; i <= n; i++ )
        fscanf( fin, "%d %d", &v[ i ].t, &v[ i ].p );
    fclose( fin );
    v[ 0 ].p = v[ 0 ].t = INF;
    std::sort( v + 1, v + n + 1, cmp );
    for( int i = 1; i <= n; i++ ){
        int l = 0, ant = 0;
        for( int j = 1; j <= n; j++ )
            if( v[ i ].p <= v[ j ].p ){
                l = my_max( l + v[ i ].p - k * ( v[ j ].t - v[ ant ].t ), v[ i ].p - k );
                if( maxx < l )
                    maxx = l;
                ant = j;
            }
    }
    FILE *fout = fopen( "carnati.out", "w" );
    fprintf( fout, "%d\n", maxx );
    fclose( fout );
    return 0;
}