Cod sursa(job #2586843)

Utilizator levladiatorDragutoiu Vlad-Ioan levladiator Data 21 martie 2020 17:20:27
Problema Tribute Scor 70
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.35 kb
#include <bits/stdc++.h>
#define NMAX 50010
#define inf 50000000
#define N 50005
using namespace std;
ifstream fin("tribute.in");
ofstream fout("tribute.out");

int n,dx,dy,rasp;
int colst[NMAX],coldr[NMAX],linsus[NMAX],linjos[NMAX],col[NMAX],lin[NMAX];

struct point
{
    int x,y;
};
point v[NMAX];

int main()
{
    fin>>n>>dx>>dy;
    for(int i=1;i<=n;i++)
    {
        fin>>v[i].x>>v[i].y;
        v[i].x++;
        v[i].y++;
        //N=max(N,max(v[i].x,v[i].y));
        col[v[i].x]++;
        lin[v[i].y]++;
    }
    int nrpct=0,x=0;
    for(int i=1;i<=N;i++)
    {
        x=col[i];
        colst[i]=colst[i-1]+nrpct;
        nrpct+=x;
    }
    nrpct=0;
    x=0;
    for(int i=N;i>=1;i--)
    {
        x=col[i];
        coldr[i]=coldr[i+1]+nrpct;
        nrpct+=x;
    }
    nrpct=0;
    x=0;
    for(int i=N;i>=1;i--)
    {
        x=lin[i];
        linsus[i]=linsus[i+1]+nrpct;
        nrpct+=x;
    }
    nrpct=0;
    x=0;
    for(int i=1;i<=N;i++)
    {
        x=lin[i];
        linjos[i]=linjos[i-1]+nrpct;
        nrpct+=x;
    }
    for(int i=1;i<=N;i++)
    {
        if(i+dy<=N)lin[i]=linjos[i]+linsus[i+dy];
        else lin[i]=inf;
        if(i+dx<=N)col[i]=colst[i]+coldr[i+dx];
        else col[i]=inf;
    }
    sort(lin+1,lin+N+1);
    sort(col+1,col+N+1);
    fout<<lin[1]+col[1];
}