結果
| 問題 |
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 |
ソースコード
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')
りあん