Official
A - レシピのアレンジ料理 / Arranged Dish from a Recipe Editorial by admin
Qwen3-Coder-480B概要
高橋君が複数の料理を作成し、各料理の得点を計算してその合計を求める問題です。
考察
この問題では、各料理に対して以下の計算を行う必要があります:
- ベースとする基本レシピの基本点 \(A_{B_j}\) を取得する。
- それにアレンジ点 \(S_j\) を加えて、その料理の得点 \(A_{B_j} + S_j\) を得る。
- 最後に、すべての料理の得点を合計する。
このとき重要なのは、基本レシピの基本点 \(A_i\) が事前に配列として与えられており、各料理で指定されたインデックス \(B_j\) に対応する値を高速に取り出す必要があるということです。幸い、入力はすべて事前に与えられており、再計算や変更も発生しないため、単純に配列アクセスするだけで十分高速です。
素朴な誤ったアプローチとして、毎回基本レシピのリストから該当するレシピを探してしまうような方法が考えられますが、これは不要な計算となり、最悪の場合で時間制限を超える(TLE)可能性があります。しかし、配列のインデックスアクセスは \(O(1)\) でできるので、これを活用すれば効率よく解けます。
アルゴリズム
- 最初に、基本レシピの基本点 \(A_1, A_2, ..., A_N\) をリストや配列として読み込む。
- 合計得点を管理する変数
total_scoreを0で初期化する。 - 各料理について以下を行う:
- ベースレシピの番号 \(B_j\) とアレンジ点 \(S_j\) を読み込む。
- \(A_{B_j - 1}\) (Pythonでは0始点インデックスなので)と \(S_j\) を加算し、
total_scoreに加える。
- 最終的な
total_scoreを出力する。
計算量
- 時間計算量: \(O(N + M)\)
(基本レシピの読み込みに \(O(N)\)、各料理の処理に \(O(M)\)) - 空間計算量: \(O(N)\)
(基本レシピの配列を保存するのに必要なメモリ)
実装のポイント
- 基本レシピのインデックスは1始点で与えられるので、配列アクセス時には-1する必要がある(Pythonなど0始点インデックス言語の場合)。
- 合計得点は非常に大きくなる可能性があるので、
long long(C++)やPythonの標準整数型などの範囲に注意。
## ソースコード
```python
# 入力の読み込み
N, M = map(int, input().split())
A = list(map(int, input().split()))
# 合計得点の初期化
total_score = 0
# 各料理の得点を計算して合計に加算
for _ in range(M):
B, S = map(int, input().split())
total_score += A[B - 1] + S
# 合計得点の出力
print(total_score)
この解説は qwen3-coder-480b によって生成されました。
posted:
last update: