結果
| 問題 |
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()