[伯俊]10157プレースホルダpython
7383 ワード
座席を割り当てる
質問する
ある公演会場は横にC席、縦にR席、C席がございます×R格子型配置.各座席の番号は、対応するグリッドの座標(x,y)で表される.
例を挙げる.下図は横7席、横6席の7席です.×6マスシートのレイアウトが展示されています.図中の各単位矩形は、個別の座席を表し、表示される値(x,y)は、座席の番号を表す.一番左下の座席番号は(1,1)、一番右上の座席番号は(7,6)です.
(1, 6)(7, 6)(4, 4)(7, 4)(1, 3)(6, 3)(1, 2)(1, 1)(2, 1)(3, 1)(7, 1)
この劇場に入るためにたくさんの人が並んで待っています.待っている人は一番前から1.2.3.4順番に待機番号表を受け取りました.並んでいる人には、(1,1)席から時計回りに回り、観客を順番に空いている席に配置します.これをもう少し具体的に説明すると以下の通りです.
まず、1人目、すなわち待機番号1の人を座席(1,1)に割り当てる.そして上方向の席に上がって、次のグループを手配します.これ以上上の席が空いていなければ、右に行って手配します.右側に空席がなければ下へ行きます.そして、下に席がない場合は左に行き、残りの空席を割り当てます.その後、左側に空席がない場合は、再び上に配置し、すべての席が配置されるまでこの手順を繰り返します.
下図7×6劇場では、1番から42番までの観客が座席の手配の結果を展示している.
678910111252627282930134253839403114324374241321522336353433161222120191817
公演場所の大きさを表す自然数CとRを与えたとき、Kの順番を待つ観客の座席番号(x,y)を見つけるプログラムを書くべきだ.
入力
1行目では,演出場のメッシュサイズを表す整数CとRが空白を隔てて順次与えられる.2つの値の範囲は5≦C,R≦1000であった.次の行は、ある観客の待機番号Kを与える.1≦K≦10000000しかありません.
しゅつりょく
入力プロンプトとして待機番号Kの視聴者に割り当てられた座席番号(x,y)を要求し、2つの値xとyを1つのスペースだけ離して印刷する.すべての席が手配され、対応する待機番号の観客に席を手配できない場合は、0(数字ゼロ)を出力します.
解決策
C,R = map(int,input().split())
my_seat = int(input())
#좌석을 줄 수 없는 경우
if my_seat > C*R :
print(0)
exit()
#4방향
dx = [0,1,0,-1]
dy = [-1,0,1,0]
#그리드 만들기
grid = [[0]*C for _ in range(R)]
direction = x= y = 0
#행렬 돌면서
for seat in range(1,C*R+1) :
#내자리면 끝내기
if seat == my_seat:
print(y+1,x+1)
break
else :
#표시하고
grid[x][y] = seat
#앞으로 전진
x += dx[direction]
y += dy[direction]
if x<0 or y<0 or x>=R or y>=C or grid[x][y]:
x -= dx[direction]
y -= dy[direction]
#범위 벗어나면 뒤로 뺐다가 방향 바꿔서 전진
direction = (direction+1)%4
x += dx[direction]
y += dy[direction]
Reference
この問題について([伯俊]10157プレースホルダpython), 我々は、より多くの情報をここで見つけました https://velog.io/@holawan/백준-10157자리배정-pythonテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol