方法1: 動的配列(std::vector)を使用する
#include <iostream>
#include <vector>
int main() {
int n, q;
std::cin >> n >> q;
std::vector<std::vector<int>> arr(n);
for (int i = 0; i < n; i++) {
int k;
std::cin >> k;
arr[i].resize(k);
for (int j = 0; j < k; j++) {
std::cin >> arr[i][j];
}
}
for (int i = 0; i < q; i++) {
int x, y;
std::cin >> x >> y;
std::cout << arr[x][y] << std::endl;
}
return 0;
}
この方法では、std::vector
クラスを使用して可変サイズの配列を作成します。最初にn
行の配列を作成し、その後、各行の要素数を指定して配列をリサイズします。要素の追加やアクセスは、通常の2次元配列と同様に行います。
方法2: 動的な2次元配列を使用する
#include <iostream>
#include <cstring>
int main() {
int n, q;
std::cin >> n >> q;
int arr = new int*[n];
for (int i = 0; i < n; i++) {
int k;
std::cin >> k;
arr[i] = new int[k];
for (int j = 0; j < k; j++) {
std::cin >> arr[i][j];
}
}
for (int i = 0; i < q; i++) {
int x, y;
std::cin >> x >> y;
std::cout << arr[x][y] << std::endl;
}
for (int i = 0; i < n; i++) {
delete[] arr[i];
}
delete[] arr;
return 0;
}
この方法では、動的な2次元配列を作成するためにポインタを使用します。最初にn
行のポインタ配列を作成し、その後、各行の配列を動的に確保します。要素の追加やアクセスも、通常の2次元配列と同様に行います。
これらの方法は、可変サイズの配列をHackerrankの問題で扱うための基本的なアプローチです。適宜、問題の要件に合わせてコードを調整してください。