結果
問題 |
No.757 チャンパーノウン定数 (2)
|
ユーザー |
|
提出日時 | 2018-12-05 01:16:43 |
言語 | PyPy3 (7.3.15) |
結果 |
RE
|
実行時間 | - |
コード長 | 1,215 bytes |
コンパイル時間 | 194 ms |
コンパイル使用メモリ | 82,972 KB |
実行使用メモリ | 87,620 KB |
最終ジャッジ日時 | 2024-07-16 00:33:15 |
合計ジャッジ時間 | 5,764 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 2 RE * 1 |
other | AC * 37 RE * 14 |
ソースコード
#!/usr/bin/env python3 import sys def main(): b = int(input()) n = int(input(), b) - 1 # 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 base = get_length_d(b, dig) bpdig = b**dig x = (n - base)//(dig+1) + bpdig - 1 def get_remain_length(b, x): return (dig + 1) * (x - bpdig + 1) t = base + get_remain_length(b, x) # print(n) # print(t) s = reconvert(b, x+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 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 convert_base(2, '1011') == 11 assert reconvert(2, 7) == '111' assert reconvert(2, 6) == '110' main()