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