Cod sursa(job #2140674)

Utilizator Laura_CorneiLaura Maria Cornei Laura_Cornei Data 23 februarie 2018 19:22:18
Problema Tribute Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.44 kb
#include <fstream>
#include <stdlib.h>
#define nmax 50005
using namespace std;
fstream f1("tribute.in", ios::in);
fstream f2("tribute.out", ios::out);
int n, dx, dy, xmed, ymed, rez=2000000001;
struct obiec
{
  int x, y;
}v[nmax];
void solutie(int vx1, int vx2, int vy1, int vy2)
{
    int i, mini, dist=0;
    for(i=1; i<=n; i++)
    {
        if(((vx1 <=v[i].x)&&(v[i].x<= vx2))&&((vy1<= v[i].y)&&(v[i].y<= vy2))) ;
        else if((vx1 <=v[i].x)&&(v[i].x<= vx2))
            dist+=(min(abs(v[i].y-vy1), abs(v[i].y-vy2)));
        else if((vy1<= v[i].y)&&(v[i].y<= vy2))
            dist+=(min(abs(v[i].x-vx1), abs(v[i].x-vx2)));
        else
        {
          mini=abs(v[i].x- vx1)+abs(v[i].y- vy1);
          mini=min(mini, abs(v[i].x- vx1)+abs(v[i].y- vy2));
          mini=min(mini, abs(v[i].x- vx2)+abs(v[i].y- vy1));
          mini=min(mini, abs(v[i].x- vx2)+abs(v[i].y- vy2));
          dist+=mini;
        }
    }
    rez=min(dist, rez);
}
void citire()
{
    int i, j, vx1, vx2, vy1, vy2, mm[4]={0, 1, -1};
    f1>>n>>dx>>dy;
    for(i=1; i<=n; i++)
       {
        f1>>v[i].x>>v[i].y;
        xmed+=v[i].x;
        ymed+=v[i].y;
       }
    xmed/=n;
    ymed/=n;

   for(i=0; i<=2; i++)
    for(j=0; j<=2; j++)
   {
       vx1=mm[i]+xmed-dx/2; vy1=mm[j]+ymed-dy/2;
       vx2=vx1+dx; vy2=vy1+dy;
       solutie(vx1, vx2, vy1, vy2);
   }
}
int main()
{
    citire();
    f2<<rez;
    return 0;
}