結果

問題 No.1315 渦巻洞穴
ユーザー りあん
提出日時 2020-12-01 03:14:51
言語 Python3
(3.13.1 + numpy 2.2.1 + scipy 1.14.1)
結果
AC  
実行時間 128 ms / 2,000 ms
コード長 1,979 bytes
コンパイル時間 151 ms
コンパイル使用メモリ 12,928 KB
実行使用メモリ 11,656 KB
最終ジャッジ日時 2024-09-13 02:47:18
合計ジャッジ時間 10,515 ms
ジャッジサーバーID
(参考情報)
judge5 / judge3
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 3
other AC * 79
権限があれば一括ダウンロードができます

ソースコード

diff #

def to_xy(num):
    dx = (1, 0, -1, 0)
    dy = (0, 1, 0, -1)
    k, p, d = 0, 1, 1
    x, y = 0, 0
    while p < num:
        for i in range(2):
            s = min(d, num - p)
            p += s
            x += s * dx[k + i]
            y += s * dy[k + i]
        k ^= 2
        d += 1
    return x, y


def to_num(x, y):
    k = max(abs(x), abs(y))
    s = k * 2 + 1
    if y == -k:
        return s * s - (s - 1) * 0 - (k - x)
    elif x == -k:
        return s * s - (s - 1) * 1 - (k + y)
    elif y == k:
        return s * s - (s - 1) * 2 - (k + x)
    else:
        return s * s - (s - 1) * 3 - (k - y)


def get_move(frm, to):
    x, y = frm
    tx, ty = to
    command = []
    while (x, y) != (tx, ty):
        if x + 1 <= tx:
            command.append('RLR')
            x += 1
        elif x - 1 >= tx:
            command.append('LRL')
            x -= 1
        elif y + 1 <= ty:
            command.append('UDU')
            y += 1
        elif y - 1 >= ty:
            command.append('DUD')
            y -= 1
        else:
            assert(False)

        if x + 1 <= tx:
            command.append('R')
            x += 1
        elif x - 1 >= tx:
            command.append('L')
            x -= 1
        elif y + 1 <= ty:
            command.append('U')
            y += 1
        elif y - 1 >= ty:
            command.append('D')
            y -= 1
        else:
            assert((x, y) == (tx, ty))

    return command


def solve(s, t):
    if s % 2 != t % 2:
        return ''.join(get_move(to_xy(s), to_xy(t)))
    else:
        ans = []
        if s % 2 == 1:
            ans += get_move(to_xy(s), to_xy(4))
            ans.append('DRUL')
            ans += get_move(to_xy(4), to_xy(t))
        else:
            ans += get_move(to_xy(s), to_xy(1))
            ans.append('RULDUD')
            ans += get_move(to_xy(1), to_xy(t))
        return ''.join(ans)


s, t = map(int, input().split())
ans = solve(s, t)
print(0, len(ans), ans, sep='\n')
0