Pagini recente » Cod sursa (job #753250) | Cod sursa (job #1173479) | Cod sursa (job #2681329) | Cod sursa (job #541660) | Cod sursa (job #125331)
Cod sursa(job #125331)
#include <cstdio>
#define NMAX 50001
int N;
int x[NMAX], y[NMAX], z[NMAX];
void read ()
{
scanf ("%d\n", &N);
int i;
for (i = 1; i <= N; ++ i)
scanf ("%d %d %d\n", x + i, y + i, z + i);
}
inline int modul (int x)
{
return x > 0 ? x : -x;
}
int findMin (int A[])
{
int pow, x, s1, s2, i, cnt;
for (pow = 1; pow < 100000000; pow <<= 1);
for (x = 0; pow; pow >>= 1)
{
s1 = s2 = 0;
for (i = 1, cnt = 0; i <= N; ++ i, ++ cnt)
s1 += modul (A[i] - (x + pow + cnt));
for (i = 1, cnt = 0; i <= N; ++ i, ++ cnt)
s2 += modul (A[i] - (x + pow + cnt + 1));
//printf ("%d %d\n", s1, s2);
if (s1 >= s2)
x += pow;
}
//printf ("%d\n", x);
s1 = 0;
for (i = 1, cnt = 0; i <= N; ++ i, ++ cnt)
s1 += modul (A[i] - (x + pow + cnt));
return s1;
}
void solve ()
{
int sol;
sol = findMin (x);
//printf ("%d\n", sol);
sol += findMin (y);
//printf ("%d\n", sol);
sol += findMin (z);
printf ("%d\n", sol);
}
int
main ()
{
freopen ("inundatii.in", "rt", stdin);
freopen ("inundatii.out", "wt", stdout);
read ();
solve ();
return 0;
}