Cod sursa(job #2661161)

Utilizator adiaioanaAdia R. adiaioana Data 21 octombrie 2020 15:28:51
Problema Tribute Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.56 kb
#include <fstream>
#define MAX 50000
using namespace std;
ifstream cin("tribute.in");
ofstream cout("tribute.out");

long long Ox[MAX+100][2], Oy[MAX+100][2];
int N,ymx,xmx, DX, DY;
inline void scan();
inline void sumpart();
int main()
{
    scan();
    sumpart();

    long long sum=0, Xmin=10e11, Ymin=10e11;
    for(int cx=0; cx<=MAX-DX; ++cx)
    {
        if(cx)
            sum=cx*Ox[cx-1][1]-Ox[cx-1][0];
        sum+=(-cx-1)*(Ox[xmx][1]-Ox[cx+DX][1])+(Ox[xmx][0]-Ox[cx+DX][0]);
        if(Xmin>sum)
            Xmin=min(Xmin,sum);
    }
    for(int cy=0; cy<=MAX-DY; ++cy)
    {
        if(cy)
            sum=cy*Oy[cy-1][1]-Oy[cy-1][0];
        sum+=(-cy-1)*(Oy[ymx][1]-Oy[cy+DY][1])+(Oy[ymx][0]-Oy[cy+DY][0]);
        Ymin=min(Ymin,sum);
    }
    sum=Xmin+Ymin;
    cout<<sum<<'\n';
    return 0;
}

inline void scan()
{
    int x,y;
    cin>>N>>DX>>DY;
    for(int i=1; i<=N; ++i)
    {
        cin>>x>>y;
        Ox[x][0]+=x;
        Ox[x][1]++;
        Oy[y][0]+=y;
        Oy[y][1]++;
        xmx=max(xmx, x);
        ymx=max(ymx, y);
    }
}

inline void sumpart()
{
    for(int i=1; i<=MAX; ++i)
        for(int j=0; j<2; ++j)
            Ox[i][j]+=Ox[i-1][j],
            Oy[i][j]+=Oy[i-1][j];
}
/*
2 2 2 2 17 17
2 2 2 2 5 5
1 5 5 9 14 14
1 3 3 4 5 5
*/
/*for(int j=0; j<2; ++j, cout<<'\n')
        for(int i=1; i<=max(ymx,xmx)+2+max(DX,DY); ++i)
            cout<<Ox[i][j]<<' ';

    for(int j=0; j<2; ++j, cout<<'\n')
        for(int i=1; i<=max(ymx,xmx)+2+max(DX,DY); ++i)
            cout<<Oy[i][j]<<' ';*/