結果
問題 |
No.757 チャンパーノウン定数 (2)
|
ユーザー |
|
提出日時 | 2018-12-05 00:07:37 |
言語 | Python3 (3.13.1 + numpy 2.2.1 + scipy 1.14.1) |
結果 |
WA
|
実行時間 | - |
コード長 | 1,330 bytes |
コンパイル時間 | 147 ms |
コンパイル使用メモリ | 12,928 KB |
実行使用メモリ | 18,076 KB |
最終ジャッジ日時 | 2024-07-08 12:12:29 |
合計ジャッジ時間 | 5,320 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 1 WA * 1 -- * 1 |
other | AC * 7 WA * 19 TLE * 1 -- * 24 |
ソースコード
#!/usr/bin/env python3 import sys def main(): b = int(input()) n = convert_base(b, input()) - 1 # print(n) ok = 0 ng = 10**5 + 1 while abs(ok - ng) > 1: mid = (ok + ng) // 2 if get_length_d(b, mid) < n: ok = mid else: ng = mid # print('max_digit:', ok) # print('max_digit_length:', get_length_d(b, ok)) dig = ok ok = b**dig - 1 ng = b**(dig + 1) base = get_length_d(b, dig) def get_remain_length(b, x): return (dig + 1) * (x - b**dig + 1) while abs(ok - ng) > 1: mid = (ok + ng) // 2 tot = base + get_remain_length(b, mid) if tot <= n: ok = mid else: ng = mid t = base + get_remain_length(b, ok) # print(n) # print(t) s = reconvert(b, ok + 1) # print(s) print(s[n - t]) def get_length_d(b, d): return (d * b**(d+1) - (d+1) * b**d + 1) // (b - 1) def convert_base(b, n): res = 0 n = n[::-1] for ni in n: res = res*b + int(ni) return res def reconvert(b, n): res = [] while n > 0: res.append(str(n % b)) n //= b res.reverse() return ''.join(res) if __name__ == '__main__': assert reconvert(2, 7) == '111' assert reconvert(2, 6) == '110' main()