Submission #36276903


Source Code Expand

from bisect import bisect

def D(H, W, rs, cs, N, rc, Q, dl):
    def search(a, x, rev=False):
        idx = bisect(a, x)
        return a[idx] - 1 if not rev else a[idx - 1] + 1
        
        
    vertical = {}
    horizontal = {}
    
    for r, c in rc:
        if c in vertical:
            vertical[c].append(r)
        else:
            vertical[c] = [r]
        if r in horizontal:
            horizontal[r].append(c)
        else:
            horizontal[r] = [c]
    
    vertical = {k: sorted([0] + v + [H + 1]) for k, v in vertical.items()}
    horizontal = {k: sorted([0] + h + [W + 1]) for k, h in horizontal.items()}
    
    rn, cn = rs, cs
    
    for d, l in dl:
        l = int(l)
        if d == "L":
            if rn not in horizontal:
                c = 1
            else:
                c = search(horizontal[rn], cn, rev=True)
            dist = abs(cn - c)
            cn = c if dist <= l else cn - l
        elif d == "R":
            if rn not in horizontal:
                c = W
            else:
                c = search(horizontal[rn], cn)
            dist = abs(cn - c)
            cn = c if dist <= l else cn + l
        elif d == "U":
            if cn not in vertical:
                r = 1
            else:
                r = search(vertical[cn], rn, rev=True)
            dist = abs(rn - r)
            rn = r if dist <= l else rn - l
        elif d == "D":
            if cn not in vertical:
                r = H
            else:
                r = search(vertical[cn], rn)
            dist = abs(rn - r)
            rn = r if dist <= l else rn + l
                    
        # print(rn, cn, file=out) 
        print(rn, cn)


H, W, rs, cs = map(int, input().split())
N = int(input())
rc = [list(map(int, input().split())) for _ in range(N)]
Q = int(input())
dl = [input().split() for _ in range(Q)]
 
D(H, W, rs, cs, N, rc, Q, dl)

Submission Info

Submission Time
Task D - LRUD Instructions
User arakaki_tokyo
Language PyPy3 (7.3.0)
Score 400
Code Size 1951 Byte
Status AC
Exec Time 1109 ms
Memory 242796 KiB

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 400 / 400
Status
AC × 2
AC × 29
Set Name Test Cases
Sample example0.txt, example1.txt
All 000.txt, 001.txt, 002.txt, 003.txt, 004.txt, 005.txt, 006.txt, 007.txt, 008.txt, 009.txt, 010.txt, 011.txt, 012.txt, 013.txt, 014.txt, 015.txt, 016.txt, 017.txt, 018.txt, 019.txt, 020.txt, 021.txt, 022.txt, 023.txt, 024.txt, 025.txt, 026.txt, example0.txt, example1.txt
Case Name Status Exec Time Memory
000.txt AC 403 ms 125420 KiB
001.txt AC 444 ms 123788 KiB
002.txt AC 392 ms 122392 KiB
003.txt AC 847 ms 222684 KiB
004.txt AC 903 ms 220760 KiB
005.txt AC 878 ms 220324 KiB
006.txt AC 873 ms 219204 KiB
007.txt AC 436 ms 123280 KiB
008.txt AC 1109 ms 241584 KiB
009.txt AC 361 ms 119640 KiB
010.txt AC 570 ms 165148 KiB
011.txt AC 646 ms 189344 KiB
012.txt AC 880 ms 232216 KiB
013.txt AC 1031 ms 242228 KiB
014.txt AC 1043 ms 241692 KiB
015.txt AC 1027 ms 241948 KiB
016.txt AC 1020 ms 242796 KiB
017.txt AC 758 ms 168384 KiB
018.txt AC 811 ms 170324 KiB
019.txt AC 810 ms 170488 KiB
020.txt AC 854 ms 171808 KiB
021.txt AC 862 ms 169892 KiB
022.txt AC 866 ms 168788 KiB
023.txt AC 870 ms 170516 KiB
024.txt AC 866 ms 170812 KiB
025.txt AC 861 ms 170292 KiB
026.txt AC 866 ms 172480 KiB
example0.txt AC 66 ms 62628 KiB
example1.txt AC 50 ms 62736 KiB