以下に、【問題】に対応するPythonソースコードを作成し、解説を行います。
# 入力の読み込み
import sys
input = sys.stdin.read
# 入力データを一括で読み込む
data = input().split()
# NとMを取得
N = int(data[0])
M = int(data[1])
# N個の文字列とその価格を格納するリスト
strings = []
prices = []
# N個の文字列と価格をリストに分割して格納
index = 2
for _ in range(N):
strings.append(data[index])
prices.append(int(data[index + 1]))
index += 2
# M個のクエリを格納するリスト
queries = []
for _ in range(M):
queries.append(data[index])
index += 1
# クエリごとに合計金額を計算して出力
for query in queries:
total_price = 0
for i in range(N):
# クエリ文字列が対象文字列の先頭に一致するかを確認
if strings[i].startswith(query):
total_price += prices[i]
print(total_price)
解説
このプログラムは、与えられた文字列と価格のリストから、特定のクエリ文字列で始まる文字列の総価格を計算します。
-
入力の読み込み:
-
sys.stdin.read
を使用して、すべての入力を一度に読み込みます。 -
input().split()
で読み込んだデータを空白で分割し、リストdata
に格納します。
-
-
NとMの取得:
-
N
とM
をdata
の最初の2つの要素から取得します。
-
-
文字列と価格の格納:
-
strings
とprices
というリストを作成し、data
のインデックスを使って、文字列とその価格をそれぞれのリストに格納します。
-
-
クエリの格納:
-
queries
というリストを作成し、data
のインデックスを使って、クエリ文字列を格納します。
-
-
クエリごとに合計金額を計算:
- 各クエリに対して、
strings
リストの各文字列がそのクエリ文字列で始まるかを確認します。 - 一致する場合、その文字列の価格を合計金額に加算します。
- クエリごとの合計金額を出力します。
- 各クエリに対して、
実行例
以下は、入力例1の結果を示す実行例です:
# 入力例1
6 5
bcac 3
abcd 14
abccjg 92
bcaddgie 2
abcd 6
cb 200
b
a
abcd
gagioheo
cb
出力結果は以下の通りです:
5
112
20
0
200
このプログラムは、各クエリに対して、対応する文字列の総価格を計算し、出力します。入力のサイズが最大10,000であるため、パフォーマンスを考慮してシンプルなループを使用しています。