INPUT:
第1 行是士兵数n,1?n?10000。接下来n 行是
士兵的初始位置,每行2 个整数x 和y,-10000《=x,y《=10000。
OUTPUT:
第1 行中的数是士兵排成一行需要的最少移动步数。
- #include <stdio.h>
- #include <stdlib.h>
- #include <math.h>
- int comp(const void *a,const void *b){
- return *(int *)a-*(int *)b;
- }
- int main(){
- int a[10000],b[10000],c[10000];
- int n,i,j,mid_b = 0,min_c = 0,mid_a = 0,sum = 0,min_a,min_b;
- scanf("%d",&n);
- for(i = 0;i<n;i++){
- scanf("%d%d",&a[i],&b[i]);
- }
- qsort(a,n,sizeof(int),comp);
- qsort(b,n,sizeof(int),comp);
- for(i=0;i<n;i++) {
- c[i] = a[i] - i;
- }
- qsort(c,n,sizeof(int),comp);
- if(n%2==0) {
- mid_a = c[(n-1)/2];
- mid_b = b[(n-1)/2];
- }
- else {
- mid_a = c[n/2];
- mid_b = b[n/2];
- }
- for(i = 0;i<n;i++)
- sum = abs( b[i] - mid_b ) + abs( a[i] - mid_a - i ) + sum;
- printf("%d\n",sum);
- exit(0);
- }