publicclasszui_shao_shua_ti_shu { publicstaticvoidmain(String[] args) { Scanner sc=newScanner(System.in); int n,mid; //n个学生,mid是中间值 n=sc.nextInt(); int [] arr=newint[n]; //存放每个学生做题数。 int [] a=newint[n]; //将arr数组复制一份进行排序 int [] result=newint[n]; //存储结果 for (int i=0;i<n;i++){ arr[i]=sc.nextInt(); a[i]=arr[i]; //输入并复制。 } kuaipai(a,0,a.length-1); //用快排进行排序,必须用快排否则会超时几毫秒。 mid=a[n/2]; int b=0; //判断当刷题数比中间值小时结果是否需要加一(默认不加) int c=0; //判断结果等于中间值时是否需要加一(默认不加) int bigger=0; int smaller=0; for (inti=0; i < n; i++) { if (arr[i]>mid){ bigger++; } if (arr[i]<mid){ smaller++; //计算比中间值大的和小的个数 }
} if (bigger>=smaller){ b=1; } if (bigger>smaller){ c=1; } for (int i=0;i<n;i++){ if (arr[i]<mid){ result[i]=mid+b-arr[i]; }else { if (arr[i] == mid) { result[i] = c; } else { result[i]=0; } } System.out.print(result[i]+" "); //判断并输出 }
} publicstaticvoidkuaipai(int [] a,int l,int r){ //快排 if (l>=r){ return; } int low=l; int high=r; int pivot=a[l]; while(low<high){ while(a[high]>=pivot&&low<high){ high--; } while(a[low]<=pivot&&low<high){ low++; } if (low<high){ int temp=a[high]; a[high]=a[low]; a[low]=temp; }