A - 注文の確認 / Order Confirmation Editorial by admin
GPT 5.4 High概要
各お客さんについて、実際の注文 \(T_i\) とキッチンに伝えた注文 \(S_i\) を 1 組ずつ比較し、異なっている回数を数える問題です。
考察
この問題で大事なのは、各お客さんごとに独立に正しいかどうかを判定することです。
たとえば、
- 1 人目: 実際は
ramen、伝達もramen - 2 人目: 実際は
sushi、伝達はpasta
なら、2 人目だけが間違いなので答えは \(1\) です。
重要な観察
\(i\) 番目のお客さんについて必要なのは、
- \(T_i = S_i\) なら正しく伝わっている
- \(T_i \neq S_i\) なら間違えている
という単純な判定だけです。
つまり、全体としては
「\(T_i\) と \(S_i\) が異なる組の個数」を数えればよい
ことになります。
間違えやすい考え方
料理名の出現回数だけを見てしまうと誤りになります。
例えば、
- 実際の注文:
a,b - 伝えた注文:
b,a
このとき、料理名の種類や個数だけ見ると同じですが、
1 人目も 2 人目も違っているので答えは \(2\) です。
したがって、順番を対応させて 1 行ずつ比較する必要があります。
どう解決するか
各行を読み込むたびに、文字列 \(T_i\) と \(S_i\) を比較します。
違っていれば答えを \(1\) 増やします。
これを \(N\) 人分繰り返せば求まります。
アルゴリズム
- \(N\) を読む
- 答えを表す変数
ansを \(0\) で初期化する - \(N\) 回繰り返す
- 文字列
t,sを読む t != sならans += 1
- 文字列
ansを出力する
計算量
- 時間計算量: \(O(N)\)
- 空間計算量: \(O(1)\)
※ 文字列の長さは最大 \(20\) 文字なので、文字列比較のコストは定数とみなせます。
実装のポイント
すべての注文を配列に保存する必要はありません。1 行読むたびに比較して数えれば十分です。
Python では文字列同士を
!=でそのまま比較できます。入力が多いので、
input = sys.stdin.readlineとして高速入力を使うと安心です。ソースコード
import sys
def main():
input = sys.stdin.readline
N = int(input())
ans = 0
for _ in range(N):
t, s = input().split()
if t != s:
ans += 1
print(ans)
if __name__ == "__main__":
main()
この解説は gpt-5.4-high によって生成されました。
posted:
last update: