import java.util.Arrays;
public class JAVA {
// 輸入緩衝區 (緩衝空間需要依照題目調整)
public static byte[] cinbuf = new byte[1024];
// 讀取一個單字 (英文姓名包含空白時請不要用)
public static String readToken() {
int offset = 0;
int bytedata = -1;
try {
// 略過非單字的字元 '\t','\n','\r',' '
bytedata = System.in.read();
while(bytedata==9||bytedata==10||bytedata==13||bytedata==32) {
bytedata = System.in.read();
}
// 載入單字的字元
while(bytedata!=-1) {
if(bytedata==9||bytedata==10||bytedata==13||bytedata==32) {
break;
} else {
cinbuf[offset++] = (byte)bytedata;
}
bytedata = System.in.read();
}
} catch(Exception e) {}
if(offset+bytedata==-1) return null; // 串流結束
return new String(cinbuf,0,offset);
}
// 讀取一行
public static String readLine() {
int offset = 0;
int bytedata = -1;
try {
// 載入整行
bytedata = System.in.read();
while(bytedata!=-1) {
if(bytedata==10) {
break;
} else {
cinbuf[offset++] = (byte)bytedata;
}
bytedata = System.in.read();
}
} catch(Exception e) {}
if(offset+bytedata==-1) return null; // 串流結束
if(cinbuf[offset-1]=='\r') offset--; // window 要去除 '\r' 字元
return new String(cinbuf,0,offset);
}
// 轉成 int 型態 (比 Integer.parseInt() 快)
public static int parseInt(String s) {
int i;
int mul = 10;
int value = s.charAt(s.length()-1)-48;
for(i=s.length()-2;i>=0;i--) {
value += (s.charAt(i)-48)*mul;
mul *= 10;
}
return value;
}
public static void main(String[] args) {
int testCase = parseInt(readLine());
for(int i = 0; i < testCase; i++) {
int size = parseInt(readToken());
int[] streetArray = new int[size];
for(int j = 0; j < size; j++)
streetArray[j] = parseInt(readToken());
Arrays.sort(streetArray);
int mid;
if(streetArray.length % 2 == 0) // if even
mid = (streetArray[streetArray.length/2-1] + streetArray[(streetArray.length/2)])/ 2;
else // if odd
mid = streetArray[(streetArray.length+1)/2-1];
int d_total = 0;
for(int street : streetArray) {
d_total += Math.abs(street - mid);
}
System.out.println(d_total);
}
}
}
2010/01/31
Vito's family
讀入陣列,求出中間數後,再逐一跟陣列每個元素相減求和。
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment