1. paizaラーニングトップ
  2. レベルアップ問題集
  3. Aランク・スキルチェック過去問題セット(言語選択)
  4. 問題一覧 VB(Beta)編
  5. 「ある数でつくられた数列」を解くために:part5 VB(Beta)編

Aランク・スキルチェック過去問題セットのサムネイル
「ある数でつくられた数列」を解くために:part5 VB(Beta)編(paizaランク B 相当)

問題にチャレンジして、ユーザー同士で解答を教え合ったり、コードを公開してみよう!

問題

下記の問題をプログラミングしてみよう!

「ある数でつくられた数列」では、3つの異なる整数を何度も掛け合わせて得られる数 を 小さい順に管理 する必要があります。
通常の配列を使用すると計算量が大きくなるため、この問題では 優先度付きキュー(ヒープ)を用いる練習をしてみましょう。


3つの整数A_1, A_2, A_3が与えられます。また、N個の整数b_1, b_2, ..., b_Nが与えられます。

各b_iに対して、A_1, A_2, A_3を掛けた値を優先度付きキューに追加し、その時点での最小の値を取り出して出力してください。

なお、C++ や一部の言語では優先度付きキューのデフォルトの挙動が降順(大きい順)になっているため、小さい順に管理する場合は以下のいずれかの方法を使用してください:

1. C++の場合:
priority_queue<long long, vector<long long>, greater<long long>> を使用する
・ または、値を挿入する際に -1 を掛けて、取り出す際に再度 -1 を掛ける

2. Pythonの場合:
heapq モジュールを使用する(デフォルトで最小ヒープ)

3. Javaの場合:
PriorityQueue を使用する(デフォルトで最小ヒープ)

入力される値

入力は以下のフォーマットで与えられます。

A_1 A_2 A_3
N
b_1
b_2
...
b_N

* 1行目 に A_1, A_2, A_3 が与えられる。
* 2行目 に N(整数の個数)が与えられる。
* 続く N 行 には、b_1, b_2, ..., b_N が1行ずつ与えられる。
入力は N+2 行 で構成され、末尾に改行が 1 つ 含まれます。


入力値最終行の末尾に改行が1つ入ります。
文字列は標準入力から渡されます。 標準入力からの値取得方法はこちらをご確認ください
期待する出力

N行出力してください。i行目には、b_iを処理した後の最小の値を出力してください。

末尾に改行を入れ、余計な文字、空行を含んではいけません。

条件

すべてのテストケースにおいて、以下の条件をみたします。

* 入力はすべて整数
* 1 ≦ A_1, A_2, A_3 ≦ 10^9
* 1 ≦ N ≦ 10^5
* 1 ≦ b_i ≦ 10^9

入力例1

2 3 5
3
4
5
6

出力例1

8
10
12

入力例2

3 7 11
3
5
6
7

出力例2

15
18
21

問題一覧へ戻る

ページの先頭へ戻る