Cod sursa(job #1792066)

Utilizator demetriad-dagpagDavid Demetriad demetriad-dagpag Data 29 octombrie 2016 23:29:20
Problema Carnati Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.18 kb
#include <stdio.h>
#include <stdlib.h>
#include <algorithm>
using namespace std;
struct g
{
    int p,c;
}v[2001];
bool comp(g a,g b)
{
    return a.p<b.p;
}
long long max(long long a,long long b)
{
    if(a>b) return a;
    return b;
}
int main()
{
    int i,n,k,j;
    long long sc,scmax,nr,x,max;
    freopen("carnati.in","r",stdin);
    freopen("carnati.out","w",stdout);
    scanf("%d%d",&n,&k);
    for(i=1; i<=n; i++)
        scanf("%d%d",&v[i].p,&v[i].c);
    sort(v+1,v+n+1,comp);
    max=0;
    for(i=1; i<=n; i++){
        sc=0;
        scmax=0;
        nr=0;
        x=0;
        for(j=i-1; j>0; j--){
            nr+=(v[i].c<=v[j].c);
            sc=v[i].c*nr-(v[i].p-v[j].p)*k;
            if(scmax<sc)
                scmax=sc;
        }
        if(i!=1)
            x+=scmax;
        sc=0;
        scmax=0;
        nr=0;
        for(j=i+1; j<=n; j++){
            nr+=(v[i].c<=v[j].c);
            sc=v[i].c*nr-(v[j].p-v[i].p)*k;
            if(scmax<sc)
                scmax=sc;
        }
        if(i!=n)
            x+=scmax;
        x+=v[i].c-k;
        if(x>max)
            max=x;
    }
    printf("%lld\n",max);

    return 0;
}