Cod sursa(job #1774583)

Utilizator tiberiu.bucur17Tiberiu Constantin Emanoil Bucur tiberiu.bucur17 Data 9 octombrie 2016 09:25:10
Problema Carnati Scor 100
Compilator c Status done
Runda Arhiva de probleme Marime 1.41 kb
#include <stdio.h>
#define INF 2000000000
struct client
{
    int t,b;
}v[2001];
inline void interschimb(int *a,int *b)
{
    int aux=*a;
    *a=*b;*b=aux;
}
void myqsort(int start,int stop)
{
    int i,j,pivot;
    i=start;j=stop;
    pivot=v[(i+j)/2].t;
    while(i<=j)
    {
        while(v[i].t<pivot)
            i++;
        while(v[j].t>pivot)
            j--;
        if(i<=j)
        {
            interschimb(&v[i].t,&v[j].t);
            interschimb(&v[i].b,&v[j].b);
            i++;j--;
        }
    }
    if(j>start)
        myqsort(start,j);
    if(i<stop)
        myqsort(i,stop);
}
int main()
{
    FILE *fin,*fout;
    fin=fopen("carnati.in","r");
    fout=fopen("carnati.out","w");
    int n,c,i,max,pret,sc,j;
    fscanf(fin,"%d%d",&n,&c);
    for(i=1;i<=n;i++)
        fscanf(fin,"%d%d",&v[i].t,&v[i].b);
    myqsort(1,n);
    v[0].t=v[1].t-1;max=-INF;
    for(i=1;i<=n;i++)
    {
        pret=v[i].b;
        sc=0;
        for(j=1;j<=n;j++)
        {
            if(pret<=v[j].b)
            {
                if(sc<(v[j].t-v[j-1].t-1)*c)
                    sc=pret-c;
                else
                    sc+=pret-(v[j].t-v[j-1].t)*c;
            }
            else
                sc-=(v[j].t-v[j-1].t)*c;
            if(sc>max)
                max=sc;
        }
    }
    fprintf(fout,"%d",max);
    fclose(fin);
    fclose(fout);
    return 0;
}