連想配列の応用問題!
問題概要
個の数列がある。
番目の数列は、長さが であり、その 番目の要素は である。
2 つの数列 は、 であって、任意の に対して であるとき、等しいという。
個の数列の種類数を答えよ。
制約
- の総和は 以下
考えたこと
問題文がいかめしくてビビるけど、実は単純なのだ。たとえば数列を C++ の vector<int>
型で表したとき、2 つの数列 P
, Q
が等しいかどうかは
P == Q
で判定できる!!
そして、数列の種類数は、set<vector<int>>
型変数 S
を用意して、S
に各数列を insert
していけばよい。
最後に、S
の要素数を返せば良い。
コード
#include <bits/stdc++.h> using namespace std; int main() { int N; cin >> N; set<vector<int>> S; for (int i = 0; i < N; ++i) { int L; cin >> L; vector<int> a(L); for (int j = 0; j < L; ++j) cin >> a[j]; S.insert(a); } cout << S.size() << endl; }