Official

A - 料理コンテスト / Cooking Contest Editorial by admin

DeepSeek V3

概要

各参加者の実力値(味の得点と盛り付けの得点の和)が最大となる参加者の番号を求める問題です。

考察

問題では各参加者の実力値は \(H_i + S_i\) で定義されており、この値が最大となる参加者を一人だけ見つければ良いです。ボーナス得点 \(D_i\) は実力値の計算には関係ないため無視できます。制約条件として実力値が最大の参加者はちょうど一人であることが保証されているため、単純に全参加者の実力値を計算して最大値を求めれば良いです。

アルゴリズム

  1. 参加者数 \(N\) を読み込む
  2. 各参加者について \(H_i\), \(S_i\), \(D_i\) を順に読み込む
  3. 各参加者の実力値 \(H_i + S_i\) を計算する
  4. 実力値の最大値とその参加者の番号(インデックス)を記録する
  5. 最大の実力値を持つ参加者の番号を出力する

計算量

  • 時間計算量: \(O(N)\)
    • 参加者数 \(N\) に対して1回のループで処理するため
  • 空間計算量: \(O(1)\)
    • 最大値とインデックスを保持する定数サイズの変数のみ使用するため

実装のポイント

  • 入力データを一度に読み込んでから処理することで効率的な入出力を実現

  • ループ内で各参加者のデータを3つずつ取り出して処理

  • 最大値の初期値は-1に設定(得点が0以上なので問題ない)

  • 参加者の番号は1-indexedであるため、インデックスに+1して記録

    ソースコード

def main():
    import sys
    data = sys.stdin.read().split()
    n = int(data[0])
    max_value = -1
    index = -1
    for i in range(n):
        h = int(data[1 + i*3])
        s = int(data[2 + i*3])
        d = int(data[3 + i*3])
        value = h + s
        if value > max_value:
            max_value = value
            index = i + 1
    print(index)

if __name__ == "__main__":
    main()

この解説は deepseekv3 によって生成されました。