PTA 铺设油井管道 JAVA

输入格式:
每个输入文件为一个测试用例,每个文件的第一行给出一个正整数n(1≤n≤1000000),表示油井数量,从第二行起的n行数据,表示每口油井的位置,每行包含以空格分隔的两个整数,分别表示每口油井的横坐标x(−10000≤x≤10000)和纵坐标y(−10000≤y≤10000)。
输出格式:
输出各油井到主管道之间的支管道最小长度总和。
输入样例:
在这里给出一组输入。例如:
4
-1 1
2 2
5 -1
-3 7
结尾无空行
输出样例:
9
结尾无空行
由于题目说管道是从左往右水平的,所以跟x坐标无关
代码:
1 package 铺设油井管道; 2 import java.util.Arrays; 3 import java.util.Scanner; 4 public class Main { 5 static int[] bucket = new int[20001]; 6 public static void main(String[] args) { 7 for(int i = 0;i < 20001;i++) { 8 bucket[i] = 0; 9 } 10 Scanner scan = new Scanner(System.in); 11 int n = scan.nextInt(); 12 int x[] = new int[n]; 13 int y[] = new int[n]; 14 for(int i = 0;i <n;i++){ 15 x[i] = scan.nextInt(); 16 y[i] = scan.nextInt(); 17 }//修改为桶排序 0 == -10000 18 // Arrays.sort(y); 19 for(int i = 0;i < n;i++) { 20 bucket[y[i] + 10000]++; 21 } 22 int t = 0; 23 for(int i = 0;i < bucket.length;i++) { 24 if(bucket[i] > 0 && t < n) { 25 bucket[i]--; 26 y[t++] = i - 10000; 27 } 28 } 29 double s = 0; 30 int z = n / 2; 31 for(int i = 0;i < n;i++)s += Math.abs(y[z] - y[i]); 32 System.out.println((int)s); 33 } 34 35 }

浙公网安备 33010602011771号