Cod sursa(job #7245)
Utilizator | Data | 21 ianuarie 2007 13:14:13 | |
---|---|---|---|
Problema | Pachete | Scor | 0 |
Compilator | cpp | Status | done |
Runda | preONI 2007, Runda 1, Clasa a 10-a | Marime | 2.26 kb |
#include<fstream>
using namespace std;
int x[50000],y[50000];
int n,x0,y0,dist;
void citire()
{
int i;
ifstream in("pachete.in");
in>>n;
in>>x0>>y0;
dist=0;
int dx,dy;
for (i=1;i<=n;i++)
{
in>>x[i]>>y[i];
if (x[i]>x0)
dx=x[i]-x0;
else
dx=x0-x[i];
if (y[i]>y0)
dy=y[i]-y0;
else
dy=y0-y[i];
if (dy+dx>dist)
dist=dx+dy;
}
}
int drumuri()
{
int dr=0;
int i,j,d,ddx,ddy,dx,dy,dd;
int xx,yy;
for (i=1;i<=n;i++)
if (x[i]>=0)
{
if (x[i]>x0)
dx=x[i]-x0;
else
dx=x0-x[i];
if (y[i]>y0)
dy=y[i]-y0;
else
dy=y0-y[i];
d=dy+dx;
xx=x[i];
yy=y[i];
x[i]=-1;
y[i]=-1;
while(d<dist)
{
for (j=1;j<=n;j++)
if (x[j]>=0)
{
if (x[j]>xx)
ddx=x[j]-xx;
else
ddx=xx-x[j];
if (y[j]>yy)
ddy=y[j]-yy;
else
ddy=yy-y[j];
dd=ddy+ddx;
if (dd+d<=dist)
{
xx=x[j];
yy=y[j];
x[j]=-1;
y[j]=-1;
j=0;
d=d+dd;
}
}
d=dist+1;
}
dr++;
}
return dr;
}
int main()
{
citire();
ofstream out("pachete.out");
out<<drumuri();
return 0;
}