Cod sursa(job #1259081)

Utilizator VisanCosminVisan Tudor Cosmin VisanCosmin Data 9 noiembrie 2014 18:07:55
Problema Carnati Scor 70
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.28 kb
#include <stdio.h>

long long max(long long a,long long b)
{
    if(a>b) return a;
    return b;
}

long long n,t[2001];
long long c[2001],p,old,maxs,news;

long long abs(long long a)
{
    if(a<0)return -a;
    return a;
}

void sorts()
{
    int inv;
    long long aux;
    do
    {
        inv  = 0;
        for(int i = 0 ;i <n-1;i++)
            if(t[i]>t[i+1])
            {
                inv =1;
                aux = t[i];
                t[i] = t[i+1];
                t[i+1] = aux;

                aux = c[i];
                c[i] = c[i+1];
                c[i+1] = aux;
            }

    }while(inv);
}

int main()
{
    FILE*f =fopen("carnati.in","r");
    fscanf(f,"%d%d",&n,&p);
    for(int i = 0 ;i<n;i++)
        fscanf(f,"%d%d",&t[i],&c[i]);
    fclose(f);

    sorts();
    long y = 0;
    for(int i = 0 ;i<n;i++)
    {
        old = news = 0;

        for(int j = 0 ;j<n;j++)
        {
            if(c[j]>=c[i]) y = c[i];
            else y = 0;

            news = old -abs(t[j]-t[j-1])*p+y;
            if(news < y-p) news = y-p;
            if(news >= maxs) maxs = news;
            old = news;
        }
    }

    FILE * g = fopen("carnati.out","w");
    fprintf(g,"%d",maxs);
    fclose(g);
    return 0;
}