Task: | Numerot |
Sender: | Metabolix |
Submission time: | 2020-10-18 10:32:13 +0300 |
Language: | Python3 (CPython3) |
Status: | READY |
Result: | 0 |
group | verdict | score |
---|---|---|
#1 | TIME LIMIT EXCEEDED | 0 |
#2 | TIME LIMIT EXCEEDED | 0 |
#3 | TIME LIMIT EXCEEDED | 0 |
test | verdict | time | group | |
---|---|---|---|---|
#1 | TIME LIMIT EXCEEDED | -- | 1, 2, 3 | details |
#2 | TIME LIMIT EXCEEDED | -- | 2, 3 | details |
#3 | TIME LIMIT EXCEEDED | -- | 3 | details |
Code
#!/usr/bin/python3def f(luku, maxnum = 0, cache = dict()):key = (maxnum, luku)if key in cache:return cache[key]if luku < maxnum:return 1, -maxnumif luku <= 9:if maxnum == 0:return 1, -lukureturn 2, -(luku + maxnum)askelia = 0muutos = 0while luku > 9:s = str(luku)[::-1]muutettu = Falsefor i in range(1, len(s) - 1):if s[i] != "0":newmaxnum = max(maxnum, max(int(s[j]) for j in range(i+1, len(s))))a, m = f(luku % (10**(i+1)), newmaxnum)askelia += amuutos += mluku += mmuutettu = Truebreakif not muutettu:askelia += 1num = max(maxnum, int(s[-1]), int(s[0]))muutos -= numluku -= numcache[key] = askelia, muutosreturn cache[key]def helppo(alkumax, ylin, nollia, alin, cache = dict()):key = (alkumax, ylin, nollia, alin)if key in cache:return cache[key]askelia, muutos = 0, 0while ylin > 0:# Nyt luku on muotoa {ylin}00000{alin}# Aiheutetaan kymmenylitys, jossa ylin laskee yhdellä.maxnum = max(alkumax, ylin, alin)if maxnum <= alin:maxnum2 = max(alkumax, ylin, alin - maxnum)askelia += 2muutos -= maxnum + maxnum2alin = (alin - maxnum - maxnum2) % 10else:askelia += 1muutos -= maxnumalin = (alin - maxnum) % 10ylin -= 1if nollia > 0:# Nyt luku on muotoa {ylin}99999{alin}# Tuhotaan yhdeksiköt pienimmästä alkaen.for i in range(nollia - 1):maxnum = 9a, m = helppo(9, 9, i, alin)askelia += amuutos += malin = (alin + m) % 10# Nyt luku on muotoa {ylin}90000{alin}i = nollia - 1maxnum = max(alkumax, ylin)a, m = helppo(maxnum, 9, i, alin)askelia += amuutos += malin = (alin + m) % 10val = (askelia, muutos)cache[key] = valreturn valdef f(luku, maxnum = 0, cache = dict()):askelia, muutos = 0, 0kymppi = 10nollia = 0while luku > 9:ylin = luku // kymppi % 10alin = luku % 10alkumax = max(int(i) for i in str(luku // kymppi // 10))a, m = helppo(max(maxnum, alkumax), ylin, nollia, alin)askelia += amuutos += mluku += mkymppi *= 10nollia += 1return askelia, muutos#print((10812292252, -91723876114), "oikea")#print(f(91723876123, 0), "laskettu")#print((1092, -9828), "oikea")#print(f(9829, 9), "laskettu")def g(x):return f(x)[0] + 1t = int(input())for _ in range(t):x = int(input())if x == 1:print(1)continuek0, k1 = 9, 10**19while (k1 - k0) > 1:k = (k1 + k0) // 2if g(k) < x:k0 = kelse:k1 = kprint(k1)
Test details
Test 1
Group: 1, 2, 3
Verdict: TIME LIMIT EXCEEDED
input |
---|
1000 1 2 3 4 ... |
correct output |
---|
1 10 11 20 22 ... |
user output |
---|
(empty) |
Test 2
Group: 2, 3
Verdict: TIME LIMIT EXCEEDED
input |
---|
1000 224995 413660 249827 2125 ... |
correct output |
---|
1731724 3216040 1940719 14585 532612 ... |
user output |
---|
(empty) |
Test 3
Group: 3
Verdict: TIME LIMIT EXCEEDED
input |
---|
1000 627887018110416188 785474884983906653 653772166720939773 784335285960673683 ... |
correct output |
---|
5530371754830260284 6918696171534226533 5757755627065159149 6908439780325129803 3223801064342340738 ... |
user output |
---|
(empty) |