3 条题解

  • 0
    @ 2025-12-6 1:05:23

    python题解:

    
    import sys
    
    def solve():
        input = sys.stdin.readline
        
        r, c, n = map(int, input().split())
        
        g = [[0] * (c + 2) for _ in range(r + 2)]
        robot_pos = [[0] * (c + 2) for _ in range(r + 2)]
        
        for i in range(1, r + 1):
            row = input().strip()
            for j, ch in enumerate(row, 1):
                g[i][j] = ord(ch)
        
        robot_r = [0] * (n + 5)
        robot_c = [0] * (n + 5)
        robot_dir = [0] * (n + 5)
        has_item = [0] * (n + 5)  # 0/1代替True/False
        holding = [0] * (n + 5)
        
        for i in range(1, n + 1):
            robot_r[i], robot_c[i], robot_dir[i] = map(int, input().split())
            robot_pos[robot_r[i]][robot_c[i]] = ord('@')
        
        k = int(input())
        
        dirs = [(-1, 0), (0, 1), (1, 0), (0, -1)]
        ans = 0
        
        for _ in range(k):
            id_num, op = input().split()
            id_num = int(id_num)
            
            cr = robot_r[id_num]
            cc = robot_c[id_num]
            cd = robot_dir[id_num]
            
            if op == 'F':
                nr, nc = cr + dirs[cd][0], cc + dirs[cd][1]
                if 1 <= nr <= r and 1 <= nc <= c:
                    if g[nr][nc] != ord('#') and robot_pos[nr][nc] != ord('@'):
                        robot_pos[cr][cc] = ord('.')
                        robot_pos[nr][nc] = ord('@')
                        robot_r[id_num], robot_c[id_num] = nr, nc
                        ans += 1
            elif op == 'L':
                robot_dir[id_num] = (cd + 3) % 4
                ans += 1
            elif op == 'R':
                robot_dir[id_num] = (cd + 1) % 4
                ans += 1
            elif op == 'P':
                if not has_item[id_num] and ord('A') <= g[cr][cc] <= ord('Z'):
                    has_item[id_num] = 1
                    holding[id_num] = g[cr][cc]
                    g[cr][cc] = ord('.')
                    ans += 1
            elif op == 'D':
                if has_item[id_num] and g[cr][cc] == ord('.'):
                    has_item[id_num] = 0
                    g[cr][cc] = holding[id_num]
                    holding[id_num] = ord(' ')
                    ans += 1
        
        print(ans)
        for i in range(1, r + 1):
            print(''.join(chr(g[i][j]) for j in range(1, c + 1)))
    
    if __name__ == "__main__":
        solve()
    
    
    

    信息

    ID
    5628
    时间
    1000ms
    内存
    256MiB
    难度
    9
    标签
    递交数
    14
    已通过
    2
    上传者