Cod sursa(job #3321291)

Utilizator stefan77Stefan Paici stefan77 Data 8 noiembrie 2025 23:12:37
Problema Tribute Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.17 kb
#include <iostream>
#include <fstream>
#include <climits>
using namespace std;
ifstream fin ("tribute.in");
ofstream fout ("tribute.out");
int c_left[50005], c_right[50005], x[50005], y[50005];
int main()
{
    int n,dx,dy,i,a,b,amax,bmax,amin,bmin,cnt=0, sum,sum1;

    fin>>n>>dx>>dy;

    amax=bmax=-1;
    amin=bmin=50001;
    sum=sum1=INT_MAX;
    for (i = 1; i <= n; i++){
        fin>>a>>b;
        x[a]++;
        y[b]++;
        amax = max (a, amax);
        bmax = max (b, bmax);
        amin = min (a, amin);
        bmin = min (b, bmin);
    }
    if (amax-amin < dx)
        sum=0;
    if (bmax-bmin < dy)
        sum1=0;
    /*for (i = 0; i <= amax; i++)
        fout<<x[i]<<" ";
    fout<<"\n";
    for (i = 0; i <= bmax; i++)
        fout<<y[i]<<" ";
    fout<<"\n";*/
    cnt=x[0];
    for (i = 1; i <= amax; i++){
        c_left[i]=c_left[i-1]+cnt;
        if(x[i] > 0)
            cnt+=x[i];
    }
    cnt=x[amax];
    for (i = amax-1; i >= 0; i--){
        c_right[i]=c_right[i+1]+cnt;
        if(x[i] > 0)
            cnt+=x[i];
    }
    for (i = 0; i <= amax-dx; i++){
        if (c_left[i]+c_right[i+dx] < sum){
            sum = c_left[i]+c_right[i+dx];
        }
    }
    /*for (i = 0; i <= amax; i++)
        fout<<c_left[i]<<" ";
    fout<<"\n";
    for (i = 0; i <= amax; i++)
        fout<<c_right[i]<<" ";
    fout<<"\n";*/
    cnt=0;
    for (i = 0; i <= amax; i++)
        c_left[i]=0;
    for (i = 0; i <= bmax; i++)
        c_right[i]=0;
    cnt=y[0];
    for (i = 1; i <= bmax; i++){
        c_left[i]=c_left[i-1]+cnt;
        if(y[i] > 0)
            cnt+=y[i];
    }
    cnt=y[bmax];
    for (i = bmax-1; i >= 0; i--){
        c_right[i]=c_right[i+1]+cnt;
        if(y[i] > 0)
            cnt+=y[i];
    }
    for (i = 0; i <= bmax-dy; i++){
        if (c_left[i]+c_right[i+dy] < sum1){
            sum1 = c_left[i]+c_right[i+dy];
        }
    }
    /*fout<<cx<<" "<<cx1<<" "<<cy<<" "<<cy1<<"\n";
    for (i = 0; i <= amax; i++)
        fout<<c_left[i]<<" ";
    fout<<"\n";
    for (i = 0; i <= amax; i++)
        fout<<c_right[i]<<" ";
    fout<<"\n";*/
    fout<<sum+sum1;
    return 0;
}