Cod sursa(job #1003673)

Utilizator andi12Draghici Andrei andi12 Data 1 octombrie 2013 11:31:55
Problema Carnati Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.58 kb
#include <fstream>
#include<cstdio>
using namespace std;
FILE *in,*out;
int mat[2005][5];
int main()
{
    in=fopen("carnati.in","r");
    out=fopen("carnati.out","w");
    int n,p,t,i,j,x,mam=-999,pmam,c,dr,st,sum;
    fscanf(in,"%d%d",&n,&c);
    for(i=1;i<=n;i++)
        fscanf(in,"%d%d",&mat[i][1],&mat[i][2]);
        x=n;
    for(i=1;i<=n;i++)
    {
        mam=mat[1][1];
        pmam=1;
        for(j=1;j<=x;j++)
        {
            if(mat[j][1]>mam)
            {
                mam=mat[j][1];
                pmam=j;
            }
        }
        x--;
        mat[pmam][1]=mat[x+1][1];
        mat[x+1][1]=mam;
    }
    mam=mat[1][2];
    pmam=mat[1][2];
    p=mat[1][2];
    st=1;
    dr=1;
    for(i=2;i<=n;i++)
    {
        sum=0;
        dr++;
        pmam=pmam-c*(mat[i][1]-mat[i-1][1]);
         for(j=st;j<=dr;j++)
        {
            if(mat[j][2]>=mat[i][2])
            {
                sum=sum+mat[i][2];
            }
        }
        sum=sum-c*(mat[dr][1]-mat[st][1]);
        if(sum>pmam)
        {
            pmam=sum;
            p=mat[i][2];
        }
        else
        {
            if((mat[i][2]>=p) && (p!=mat[i][2]))
                pmam=pmam+p;
        }
        if(pmam>mam)
            mam=pmam;
        if((pmam<mat[i][2]) && (mat[i][1]!=mat[i-1][1]))
        {
            pmam=mat[i][2];
            st=i;
            dr=i;
            p=mat[i][2];
        }
        if(pmam>mam)
            mam=pmam;
    }
    fprintf(out,"%d",mam-c);
    return 0;
}