結果
| 問題 |
No.2868 Another String of yuusaan
|
| コンテスト | |
| ユーザー |
lam6er
|
| 提出日時 | 2025-03-31 17:58:56 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
TLE
|
| 実行時間 | - |
| コード長 | 2,397 bytes |
| コンパイル時間 | 151 ms |
| コンパイル使用メモリ | 82,596 KB |
| 実行使用メモリ | 53,100 KB |
| 最終ジャッジ日時 | 2025-03-31 17:59:37 |
| 合計ジャッジ時間 | 3,827 ms |
|
ジャッジサーバーID (参考情報) |
judge4 / judge5 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 2 |
| other | TLE * 1 -- * 17 |
ソースコード
def main():
import sys
N, K = map(int, sys.stdin.readline().split())
def compute_rem_max(K):
if K == 0:
return 0
target = (K + 1) // 2
if target == 0:
return 0
low = 0
high = 60 # since 4^60 is way larger than any K up to 1e15
while low < high:
mid = (low + high) // 2
if (1 << (2 * mid)) < target: # 4^mid = 2^(2*mid)
low = mid + 1
else:
high = mid
return low
rem_max = compute_rem_max(K)
level1 = ['y', 'u', 'u', 's', 'a', 'a', 'n']
current_sum = 0
found_char = None
current_rem = 0
k_remaining = 0
for idx, c in enumerate(level1):
if c in {'u', 'a'}:
rem_initial = N - 1
if rem_initial < 0:
size = 1
else:
if rem_initial < rem_max:
size = 2 * (4 ** rem_initial) - 1
if size > K:
size = K + 1
else:
size = K + 1
else:
size = 1
if current_sum + size >= K:
found_char = c
k_remaining = K - current_sum
current_rem = N - 1 if c in {'u', 'a'} else 0
break
current_sum += size
current_char = found_char
current_rem_steps = current_rem
while True:
if current_rem_steps == 0 or current_char not in {'u', 'a'}:
print(current_char)
return
substitution = ['y', 'u', 'u', 's', 'a', 'a', 'n']
for c_sub in substitution:
if c_sub in {'u', 'a'}:
rem_sub = current_rem_steps - 1
if rem_sub < 0:
size_sub = 1
else:
if rem_sub < rem_max:
size_sub = 2 * (4 ** rem_sub) - 1
if size_sub > k_remaining:
size_sub = k_remaining + 1
else:
size_sub = k_remaining + 1
else:
size_sub = 1
if k_remaining <= size_sub:
current_char = c_sub
current_rem_steps = rem_sub if c_sub in {'u', 'a'} else 0
break
else:
k_remaining -= size_sub
if __name__ == "__main__":
main()
lam6er