以下は、うなぎ屋の座席配置をシミュレーションする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()
解説
-
入力を標準入力から読み取る
import sys input = sys.stdin.read
-
メイン処理関数の定義
def main():
-
入力データを読み取り、行ごとに分割する
data = input().strip().split('\n')
-
最初の行から座席数(n)とグループ数(m)を取得
n, m = map(int, data[0].split())
-
座席の使用状況を管理するリストを初期化
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)
このプログラムは、入力されたデータに基づいて座席の配置をシミュレーションし、最後に何人が無事に座れたかを計算します。