結果
問題 |
No.757 チャンパーノウン定数 (2)
|
ユーザー |
|
提出日時 | 2018-12-05 00:38:39 |
言語 | PyPy3 (7.3.15) |
結果 |
RE
|
実行時間 | - |
コード長 | 1,219 bytes |
コンパイル時間 | 195 ms |
コンパイル使用メモリ | 82,688 KB |
実行使用メモリ | 70,272 KB |
最終ジャッジ日時 | 2024-07-08 13:36:31 |
合計ジャッジ時間 | 4,499 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge4 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | RE * 3 |
other | AC * 7 WA * 2 RE * 42 |
ソースコード
#!/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 = str(int(str(x+1), b)) # 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()