Cod sursa(job #2676975)

Utilizator xXoctavianXxStanescu Matei Octavian xXoctavianXx Data 25 noiembrie 2020 16:13:51
Problema Tribute Scor 30
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.3 kb
#include <bits/stdc++.h>

using namespace std;

ifstream fin("tribute.in");
ofstream fout("tribute.out");

int n,dx,dy,a,b;
int y[50002],x[50002],stanga,dreapta,disty,distx;

int m[100][100];

int main()
{
    fin>>n>>dx>>dy;
    for(int i=0; i<n; i++)
    {
        fin>>a>>b;
        x[a]++;
        distx+=a;
        y[b]++;
        disty+=b;

        m[a][b]++;
    }

    /*for(int i=0; i<10; i++)
    {
        for(int j=0; j<10; j++)
        {
            if(m[i][j]>0) cout<<".";
            else cout<<" ";
        }
        cout<<"\n";
    }*/

    stanga=0;
    dreapta=n;

    dreapta-=x[0];
    int distxmin=distx;
    for(int i=1; i<50002 && stanga<=dreapta; i++)
    {
        //cout<<distx<<" "<<stanga<<" "<<dreapta<<"\n";
        distx-=dreapta;
        dreapta-=x[i];
        distx+=stanga;
        if(i>=dx) stanga+=x[i-dx];
        distxmin=min(distx,distxmin);
    }
    stanga=0;
    dreapta=n;

    dreapta-=y[0];
    int distymin=disty;
    for(int i=1; i<50002 && stanga<=dreapta; i++)
    {
        //cout<<disty<<" "<<stanga<<" "<<dreapta<<"\n";
        disty-=dreapta;
        dreapta-=y[i];
        disty+=stanga;
        if(i>=dy) stanga+=y[i-dy];
        distymin=min(disty,distymin);
    }
    fout<<distxmin+distymin;
    return 0;
}