釣り王パイソン白駿17143
3555 ワード
質問する
input
最初の行は、メッシュプレートのサイズR、C、およびサメの数Mを与える.(2 ≤ R, C ≤ 100, 0 ≤ M ≤ R×C)
2行目から、Mラインにサメの情報が.サメの情報は5つの整数r,c,s,d,z(1≦r≦r,1≦c≦C,0≦s≦1000,1≦d≦4,1≦z≦10000)からなる.(r,c)はサメの位置,sは速度,dは移動方向,zは大きさである.dが1の場合は上,2の場合は下,3の場合は右,4の場合は左である.
同じ大きさのサメは2匹もいません.1つの格子に2匹以上のサメはいません.
output
釣り王が捕獲したサメの大きさの和を出力します.
TODO
상어[key] = value # value = x,y,s,d,z
world[x][y] = key
for position in c :
for r in range(R):
world[r][position] != 0 -> 상어 정보 삭제
for c in range(C):
world[r][c] = 0 -> 초기화
1초 후 방향
R = 4 s = 3 r= 0
0 1 2 3 4 5 6 7 8 9
> > > < < < > > > < ...
# 0에서 출발했을때 R-1번마다 바뀜 ->
((x+s)) // (r-1)) %2 == 1
((r-1 - x + s) // (r-1)) % 2 ==1
d = change[d] #{1:2, 2:1, 3:4, 4:3}
1초 후 상어 위치
R = 5
0 1 2 3,..., R-1, R-2, R-3 ,..., 1 반복
(x+s)%(r+(r-2))
(r-1)-x+s) % (r+(r-2)
CODE
r,c,m = map(int,input().split())
sharks = [list(map(int,input().split())) for _ in range(m)]
shark_dict = {}
world = [[0 for _ in range(c)] for _ in range(r)]
for i,shark in enumerate(sharks):
shark[0] -=1
shark[1] -=1
shark_dict[i+1] = shark
world[shark[0]][shark[1]] = i+1
r_position_d = [i for i in range(r)] + [j for j in range(r-2,0,-1)]
r_position_u = [i for i in range(r-1, -1, -1 )] + [j for j in range(1,r-1)]
c_position_r = [i for i in range(c)] + [j for j in range(c-2,0,-1)]
c_position_l = [i for i in range(c-1,-1,-1)] + [j for j in range(1,c-1)]
position = [0,r_position_u, r_position_d , c_position_r, c_position_l]
answer = 0
for pos in range(c):
catch = False
for i in range(r):
if not catch and world[i][pos] !=0 :
answer += shark_dict[world[i][pos]][4]
del shark_dict[world[i][pos]]
world[i][pos] = 0
catch = True
for j in range(c):
world[i][j] = 0
if not shark_dict.keys():
break
key_list = list(shark_dict.keys())
for key in key_list:
x,y,s,d,z = shark_dict[key]
nx,ny = x,y
if s != 0 :
if d == 1 :
nx = position[d][((r-1)-x+s) % (r+(r-2))]
if ((r-1 - x + s) // (r-1)) % 2 :
d = 2
elif d == 2 :
nx = position[d][(x+s)%(r+(r-2))]
if ((x+s)//(r-1))%2 :
d= 1
elif d==3 :
ny = position[d][(y+s)%(c+(c-2))]
if ((y+s)//(c-1))%2 :
d=4
elif d == 4 :
ny = position[d][(c-1-y + s) %(c+(c-2))]
if ((c-1 - y + s ) // (c-1)) %2 :
d= 3
if world[nx][ny] != 0 :
if shark_dict[world[nx][ny]][4] > z :
del shark_dict[key]
continue
else :
del shark_dict[world[nx][ny]]
world[nx][ny] = key
else :
world[nx][ny] = key
shark_dict[key] = [nx,ny,s,d,z]
print(answer)
振り返る
これは彼らにA 4紙を出させる問題です.
サメの方向を勝手に変えられないので憂鬱です.最終的には一つ一つ変化します.
少しずつ曖昧になり、コードが乱れています.
次の問題からきれいにやりなさい
if world[nx][ny] != 0 :
後半はこの条件文からサメの情報を削除し鍵を削除しました.shark_dict[key]= [nx,ny,s,d,z]
使い直したのでサメは削除していません出てきたのでうろたえる例はすべて正しいが、そのまま...解決を続けた.
Reference
この問題について(釣り王パイソン白駿17143), 我々は、より多くの情報をここで見つけました https://velog.io/@ifelifelse/낚시왕-파이썬-백준-17143テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol