題目描述
有時候使用動態改變大小的陣列是不錯的方法。Java的Arraylist類別提供了動態陣列的功能,請嘗試使用Arraylist來解決這個問題。
您將會得到N行資料。每行資料包含0個或是0個以上的整數。接著您需要進行一些查詢,來取得第x行、第y個位置的整數。
資料將會從標準輸入串流中輸入。
原題網址
輸入格式
第一行輸入一個整數n,範圍在1到20000之間(包含1和20000)。接下來的n行每行會有一個整數d和d個用空格隔開的整數,d的範圍在0到50000之間(包含0和50000)。緊接的下一行有一個整數q,範圍在1到1000之間(包含1和1000),代表查詢的次數。再接下來的q行每行包含x和y兩個整數數字,x和y的範圍在1到n之間(包含1和n)。n行中d個整數的數量總合不會超過100000。
輸出格式
分行輸出每一行查詢的結果,如果查詢位置的元素不存在,輸出「ERROR!」。
範例輸入
5
5 41 77 74 22 44
1 12
4 37 34 36 52
0
3 20 22 33
5
1 3
3 4
3 1
4 3
5 5
5 41 77 74 22 44
1 12
4 37 34 36 52
0
3 20 22 33
5
1 3
3 4
3 1
4 3
5 5
範例輸出
74
52
37
ERROR!
ERROR!
52
37
ERROR!
ERROR!
解題概念
利用ArrayList
參考答案
import java.util.ArrayList;
import java.util.Scanner;
public class Solution {
public static void main(final String[] args) {
final Scanner sc = new Scanner(System.in);
final int n = sc.nextInt();
final ArrayList<ArrayList<Integer>> listArray = new ArrayList<>();
for (int i = 0; i < n; ++i) {
final ArrayList<Integer> list = new ArrayList<>();
listArray.add(list);
final int d = sc.nextInt();
for (int j = 0; j < d; ++j) {
list.add(sc.nextInt());
}
}
final int q = sc.nextInt();
final StringBuilder sb = new StringBuilder();
for (int i = 0; i < q; ++i) {
final int x = sc.nextInt(), y = sc.nextInt();
try {
sb.append(listArray.get(x - 1).get(y - 1));
} catch (final Exception ex) {
sb.append("ERROR!");
}
sb.append("\n");
}
System.out.println(sb.toString().trim());
}
}