6 static inline int distance(int crabs
[], int ncrabs
, int pos
)
9 for (int i
= 0; i
<ncrabs
; i
++)
10 dist
+= abs(crabs
[i
]-pos
);
18 int crabs
[1000] = {0};
23 getline(&buf
, &len
, stdin
);
24 char *p
= strtok(buf
, ",");
25 crabs
[ncrabs
] = atoi(p
);
27 minp
= crabs
[ncrabs
++];
28 while ((p
= strtok(NULL
, ",")) != NULL
) {
29 crabs
[ncrabs
] = atoi(p
);
30 maxp
= maxp
< crabs
[ncrabs
] ? crabs
[ncrabs
] : maxp
;
31 minp
= minp
> crabs
[ncrabs
] ? crabs
[ncrabs
] : minp
;
35 int middledist
= INT_MAX
;
36 int middle
= (maxp
+minp
)/2;
37 while (middle
!= maxp
&& middle
!= minp
) {
38 middledist
= distance(crabs
, ncrabs
, middle
);
39 if (distance(crabs
, ncrabs
, middle
+1) > middledist
) {
41 middle
= (middle
+minp
)/2;
44 middle
= (middle
+maxp
)/2;
47 printf("%d\n", middledist
);