2
0

以下は、うなぎ屋の座席配置をシミュレーションするPythonプログラムです。

# 入力を標準入力から読み取る
import sys
input = sys.stdin.read

# メイン処理関数
def main():
    # 入力データを読み取り、行ごとに分割する
    data = input().strip().split('\n')

    # 最初の行から座席数(n)とグループ数(m)を取得
    n, m = map(int, data[0].split())

    # 座席の使用状況を管理するリスト(Falseは空いている、Trueは埋まっている)
    seats = [False] * n

    # 座れた人数のカウンター
    seated_count = 0

    # 各グループの処理
    for i in range(1, m + 1):
        a_i, b_i = map(int, data[i].split())
        b_i -= 1  # 座席番号を0始まりに変換

        # グループが座ろうとする座席の範囲を計算
        can_seat = True
        for j in range(a_i):
            if seats[(b_i + j) % n]:
                can_seat = False
                break

        # 座れる場合、座席をTrue(埋まっている)に更新
        if can_seat:
            for j in range(a_i):
                seats[(b_i + j) % n] = True
            seated_count += a_i

    # 最終的な座れた人数を出力
    print(seated_count)

# メイン処理を呼び出す
if __name__ == "__main__":
    main()

解説

  1. 入力を標準入力から読み取る

    import sys
    input = sys.stdin.read
    
  2. メイン処理関数の定義

    def main():
    
  3. 入力データを読み取り、行ごとに分割する

    data = input().strip().split('\n')
    
  4. 最初の行から座席数(n)とグループ数(m)を取得

    n, m = map(int, data[0].split())
    
  5. 座席の使用状況を管理するリストを初期化

    seats = [False] * n
    
  6. 座れた人数のカウンターを初期化

    seated_count = 0
    
  7. 各グループの処理

    for i in range(1, m + 1):
        a_i, b_i = map(int, data[i].split())
        b_i -= 1  # 座席番号を0始まりに変換
    
  8. グループが座ろうとする座席の範囲を計算し、既に埋まっている座席があるか確認

    can_seat = True
    for j in range(a_i):
        if seats[(b_i + j) % n]:
            can_seat = False
            break
    
  9. 座れる場合、座席を埋める(Trueに更新)

    if can_seat:
        for j in range(a_i):
            seats[(b_i + j) % n] = True
        seated_count += a_i
    
  10. 最終的な座れた人数を出力

    print(seated_count)
    

このプログラムは、入力されたデータに基づいて座席の配置をシミュレーションし、最後に何人が無事に座れたかを計算します。

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0