這題因為輸入檔案太大了,用 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); /* 答案的運算自行處理 */ } } }