Cod sursa(job #3321288)

Utilizator stefan77Stefan Paici stefan77 Data 8 noiembrie 2025 22:59:56
Problema Tribute Scor 80
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.09 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,cnt=0, sum,sum1,cx,cx1, cy,cy1;

    fin>>n>>dx>>dy;

    amax=bmax=-1;
    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);
    }
    /*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];
            cx=i;
            cx1=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];
            cy=i;
            cy1=i+dx;
        }
    }
    /*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;
}