Cod sursa(job #1356039)

Utilizator robx12lnLinca Robert robx12ln Data 23 februarie 2015 09:38:32
Problema Carnati Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.08 kb
#include<fstream>
#include<algorithm>
using namespace std;
ifstream fin("carnati.in");
ofstream fout("carnati.out");
pair<int,int>p[2005];
long double sum;
long long s,maxim,d;
int p1,u,st,i,n,mid,c,v[2005],j;
int main(){
    fin>>n>>c;
    for(i=1;i<=n;i++){
        fin>>p[i].first>>p[i].second;
        v[i]=p[i].second;
        sum+=v[i];
    }
    sum/=n;
    sort(v+1,v+n+1);
    p1=1;
    u=n;
    while(p1<=u){
        mid=(p1+u)/2;
        if(sum>=v[mid]){
            p1=mid+1;
        }else{
            u=mid-1;
        }
    }
    sum=v[p1];
    for(i=1;i<=n;i++){
        if(p[i].second<sum){
            p[i].first=p[i].second=0;
        }
    }
    sort(p+1,p+n+1);
    i=1;
    while(p[i].second==0){
        i++;
    }
    maxim=-20000000000;
    for(;i<=n;i++){
        s=sum;
        d=0;
        for(j=i+1;j<=n && (long long)d*c<=s;j++){
            s+=sum;
            d=p[j].first-p[i].first+1;
            if(maxim<s-d*c*1LL){
                maxim=s-d*c*1LL;
            }
        }
    }
    fout<<maxim;
    return 0;
}