complete 29413.py
This commit is contained in:
60
zeta_python/completed/29413.py
Normal file
60
zeta_python/completed/29413.py
Normal file
@@ -0,0 +1,60 @@
|
|||||||
|
import math
|
||||||
|
from decimal import Decimal, getcontext
|
||||||
|
|
||||||
|
getcontext().prec = 32
|
||||||
|
|
||||||
|
|
||||||
|
class ДимаЗарплата:
|
||||||
|
TRI = Decimal(1) / Decimal(3)
|
||||||
|
|
||||||
|
def __init__(self, k: int):
|
||||||
|
self.k = k
|
||||||
|
|
||||||
|
def solve(self) -> str:
|
||||||
|
u = 1
|
||||||
|
minima = (Decimal(10) ** (u - 1)) ** self.TRI
|
||||||
|
maxima = (Decimal(10) ** (u)) ** self.TRI
|
||||||
|
delta = 2
|
||||||
|
cnt = delta * u
|
||||||
|
now = self.k
|
||||||
|
while now - cnt > 0:
|
||||||
|
now -= cnt
|
||||||
|
u += 1
|
||||||
|
|
||||||
|
if (u - 1) % 3 != 0:
|
||||||
|
minima = (Decimal(10) ** (u - 1)) ** self.TRI
|
||||||
|
else:
|
||||||
|
minima = Decimal(10) ** ((u - 1) // 3)
|
||||||
|
|
||||||
|
if u % 3 != 0:
|
||||||
|
maxima = (Decimal(10) ** u) ** self.TRI
|
||||||
|
else:
|
||||||
|
maxima = Decimal(10) ** (u // 3)
|
||||||
|
|
||||||
|
if u % 3 == 0:
|
||||||
|
delta = int(maxima) - math.ceil(minima)
|
||||||
|
elif (u - 1) % 3 == 0:
|
||||||
|
delta = int(maxima) - int(minima) + 1
|
||||||
|
else:
|
||||||
|
delta = int(maxima) - math.ceil(minima) + 1
|
||||||
|
cnt = u * delta
|
||||||
|
|
||||||
|
if u == 1:
|
||||||
|
return str((math.ceil(minima) + now - 1) ** 3)[0]
|
||||||
|
else:
|
||||||
|
d, m = divmod(now - 1, u)
|
||||||
|
return str((math.ceil(minima) + d) ** 3)[m]
|
||||||
|
|
||||||
|
|
||||||
|
def test():
|
||||||
|
D_V = "".join(str(i**3) for i in range(1, 1000))
|
||||||
|
for i, c in enumerate(D_V):
|
||||||
|
solver = ДимаЗарплата(i + 1)
|
||||||
|
if solver.solve() != c:
|
||||||
|
return False
|
||||||
|
return True
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
k = int(input())
|
||||||
|
print(ДимаЗарплата(k).solve())
|
||||||
Reference in New Issue
Block a user