C++における可変サイズの配列のHackerrankの解法


方法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の問題で扱うための基本的なアプローチです。適宜、問題の要件に合わせてコードを調整してください。