Cod sursa(job #3276168)

Utilizator nicoleta_iancuIancu Nicoleta nicoleta_iancu Data 12 februarie 2025 20:13:20
Problema Tribute Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.62 kb

#include <iostream>
#include <vector>
#include <cmath>
#include <fstream>
using namespace std;
ifstream fin("tribute.in");
ofstream fout("tribute.out");
int main()
{
    int n, dx, dy,x1,y1;
    fin >> n >> dx >> dy;
    int sumy=0, sumx=0;
    vector<int>y(n);
    vector<int>x(n);
    for (int i = 0; i < n; ++i) {
        fin >> x1 >> y1;
        sumx += x1;
        sumy += y1;
        x[i] = x1;
        y[i] = y1;
    }
    int pozdxsus, pozdxjos, pozdyjos, pozdysus;
    int pozdx = round(sumx / n);
    int pozdy = round(sumy / n);
    if (dx % 2 == 0) {
        pozdxsus = pozdx+(dx / 2);
        pozdxjos = pozdx - (dx / 2);
    }
    else if ((int)sumx / n == pozdx) {
        pozdxsus = pozdx + (dx / 2) + 1;
        pozdxjos = pozdx - (dx / 2);
    }
    else {
        pozdxsus = pozdx + (dx / 2);
        pozdxjos = pozdx - (dx / 2)-1;
    }
    if (dy % 2 == 0) {
        pozdysus = pozdx + (dx / 2);
        pozdyjos = pozdx - (dx / 2);
    }
    else if ((int)sumx / n == pozdx) {
        pozdysus = pozdx + (dx / 2) + 1;
        pozdyjos = pozdx - (dx / 2);
    }
    else {
        pozdysus = pozdx + (dx / 2);
        pozdyjos = pozdx - (dx / 2) - 1;
    }
    int dist = 0;
    for (int i = 0; i < n; ++i) {
        if (x[i] < pozdxjos) {
            dist+=pozdxjos -x[i];
        }
        else if (x[i] > pozdxsus) {
            dist+= x[i]-pozdxsus;
        }
        if (y[i] < pozdyjos) {
            dist += pozdyjos - y[i];
        }
        else if (y[i] > pozdysus) {
            dist += pozdysus - y[i];
        }
    }
    fout << dist;
    return 0;
}