這題因為輸入檔案太大了,用 Scanner 記憶體會直接炸掉,推薦使用 StreamTokenizer 作為輸入工具。
宣告:StreamTokenizer st = new StreamTokenizer(new java.io.BufferedReader(new java.io.InputStreamReader(System.in)));
讀入新的資料前,需呼叫函式:st.nextToken()
若讀到的是整數或浮點數,資料會存於:st.nval()
若讀到的是字串,資料會存於:st.sval()
以下程式碼供參考:
import java.io.StreamTokenizer;
import java.io.IOException;
import java.util.Arrays;
public class a737 {
// 將arr宣告在main外面,避免每筆測資都重複配置新的記憶體空間
static int[] arr = new int[500];
// 因為使用了.io的函式,所以一定要加 throws IOException
public static void main(String[] args) throws IOException {
// 使用 StreamTokenizer 作為輸入工具
StreamTokenizer st = new StreamTokenizer(new java.io.BufferedReader(new java.io.InputStreamReader(System.in)));
// 讀取新東西前,要先呼叫 st.nextToken();
// 若讀取到字串,它會存在 st.sval // String 型別
// 若讀取到數字,它會存在 st.nval // double 型別
st.nextToken();
int n = (int)st.nval;
while(n-- > 0){
st.nextToken();
int r = (int)st.nval;
for(int i=0; i<r; i++){
st.nextToken();
arr[i] = (int)st.nval;
}
// 給予sort函式排序的範圍
Arrays.sort(arr, 0, r);
/*
答案的運算自行處理
*/
}
}
}