'n' 個の文字列 w1、w2、......、wn が与えられます。文字列 wi のすべての一意の部分文字列を考慮することによって形成される文字列のセットを Si とします。部分文字列は、文字列内の 1 つ以上の文字の連続シーケンスとして定義されます。部分文字列の詳細については、こちらを参照してください。'S' = {S1 U S2 U .... Sn} とします。つまり、'S' は、すべてのセット S1、S2、..... Sn 内のすべての一意の文字列を考慮することによって形成される文字列のセットです。多くのクエリが与えられ、クエリごとに整数「k」が与えられます。あなたの仕事は、セット 'S' から辞書編集的に k 番目に小さい文字列を出力することです。
入力:
入力の最初の行には、文字列の数を示す単一の整数「n」が含まれています。次の「n」行はそれぞれ文字列で構成されます。i 行目 (1<=i<=n) の文字列は wi で示され、長さは mi です。次の行は、クエリの数を示す単一の整数 'q' で構成されます。次の「q」行はそれぞれ、単一の整数「k」で構成されます。
注: 入力文字列は、小文字の英字 'a' から 'z' のみで構成されます。
出力:
'q' 行を出力します。ここで、i 行目は、i 番目のクエリに対する回答である文字列で構成されます。入力が無効な場合 ('k' > |S|)、その場合は "INVALID" (わかりやすくするために引用符) を出力します。
制約:
1<=n<=50
1<=mi<=2000
1<=q<=500
1<=k<=1000000000
https://www.interviewstreet.com/challenges/dashboard/#problem/4efa210eb70ac
私のアプローチ
入力文字列ごとに、その部分文字列を生成してセットに追加します。これにより、重複が自動的に排除され、ソートされた状態が維持されます。セット内のインデックス i の要素を返します。
上記のアプローチでコードをここに書きました:
http://justprogrammng.blogspot.com/2012/06/interviewstreet-find-strings-solution-c.html
しかし、私が直面している問題は
terminate called after throwing an instance of 'std::bad_alloc'
what(): std::bad_alloc
Aborted (core dumped)
このエラーは、いくつかのテスト ケースで発生しています。このエラーが発生する理由と、このエラーを修正する方法を教えてください。