釣り王パイソン白駿17143


質問する



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]
使い直したのでサメは削除していません出てきたのでうろたえる
例はすべて正しいが、そのまま...解決を続けた.