Official

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\) 人分繰り返せば求まります。

アルゴリズム

  1. \(N\) を読む
  2. 答えを表す変数 ans\(0\) で初期化する
  3. \(N\) 回繰り返す
    • 文字列 t, s を読む
    • t != s なら ans += 1
  4. 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: