Pagini recente » Cod sursa (job #2804852) | Cod sursa (job #2667466) | Cod sursa (job #1950611) | Cod sursa (job #173597) | Cod sursa (job #125486)
Cod sursa(job #125486)
#include <stdio.h>
#define Nmax 50001
struct nod { long x, y, z; } p[Nmax];
long n, i;
long long avgx, avgy, avgz, rez, xx, yy, zz;
inline long abs(long x) { return x<0?-x:x; }
long binx(long P, long Q)
{
long m=(P+Q)/2;
if (P+1==Q) return abs(p[P].x-avgx)<abs(p[Q].x-avgx)?P:Q;
if (p[m].x < avgx) return binx(P,m);
else return binx(m,Q);
}
long biny(long P, long Q)
{
long m=(P+Q)/2;
if (P+1==Q) return abs(p[P].y-avgy)<abs(p[Q].y-avgy)?P:Q;
if (p[m].y < avgy) return biny(P,m);
else return biny(m,Q);
}
long binz(long P, long Q)
{
long m=(P+Q)/2;
if (P+1==Q) return abs(p[P].z-avgz)<abs(p[Q].z-avgz)?P:Q;
if (p[m].z < avgz) return binz(P,m);
else return binz(m,Q);
}
int main()
{
freopen("inundatii.in", "r", stdin);
scanf("%ld", &n);
for (i=1; i<=n; i++) scanf("%ld %ld %ld\n", &p[i].x, &p[i].y, &p[i].z);
fclose(stdin);
freopen("inundatii.out", "w", stdout);
if (n==2) printf("%ld\n", abs(p[1].x-p[2].x)+abs(p[1].y-p[2].y)+abs(p[1].z-p[2].z)+3);
else
{
for (i=1; i<=n; i++) { avgx+=p[i].x; avgy+=p[i].y; avgz+=p[i].z; }
avgx/=n; avgy/=n; avgz/=n;
xx=binx(1,n); yy=biny(1,n); zz=binz(1,n);
for (i=1; i<=n; i++)
{
rez+=abs(p[i].x-(p[xx].x-xx+i));
rez+=abs(p[i].y-(p[yy].y-yy+i));
rez+=abs(p[i].z-(p[zz].z-zz+i));
}
printf("%lld\n", rez);
}
fclose(stdout);
return 0;
}