Task: | Numerot |
Sender: | tykkipeli |
Submission time: | 2020-10-18 03:29:19 +0300 |
Language: | Python3 (CPython3) |
Status: | READY |
Result: | 25 |
group | verdict | score |
---|---|---|
#1 | ACCEPTED | 12 |
#2 | ACCEPTED | 13 |
#3 | TIME LIMIT EXCEEDED | 0 |
test | verdict | time | group | |
---|---|---|---|---|
#1 | ACCEPTED | 0.70 s | 1, 2, 3 | details |
#2 | ACCEPTED | 0.78 s | 2, 3 | details |
#3 | TIME LIMIT EXCEEDED | -- | 3 | details |
Code
dp = [[[[(0,0)]*11 for i in range(11)] for k in range(11)] for j in range(30)] done = [[[[False]*11 for i in range(11)] for k in range(11)] for j in range(30)] def maxdigit(n): ans = 0 while n > 0: ans = max(ans, n%10) n //= 10 return ans def solve(a,b,c,d): if done[a][b][c][d]: return dp[a][b][c][d] done[a][b][c][d] = True if a == 1: dp[a][b][c][d] = (0,d) return dp[a][b][c][d] if c == 1: if a == 2: val = 10+d cnt = 0 while val >= 10: val -= max(b,maxdigit(val)) cnt += 1 dp[a][b][c][d] = (cnt,val) return dp[a][b][c][d] else : if b > d: p = solve(a-1,9,1,10+d-b-1) pp = solve(a-1,b,9,p[1]) dp[a][b][c][d] = (p[0] + pp[0], pp[1]) return dp[a][b][c][d] else: x = max(1,b) p = solve(a-1,9,1,10-x-1) pp = solve(a-1,b,9,p[1]) lisa = 0 if d > 0: lisa += 1 dp[a][b][c][d] = (p[0] + pp[0] + lisa, pp[1]) return dp[a][b][c][d] else: kaytossa = max(b,c) if b >= c or a == 2: p = solve(a,kaytossa,1,d) pp = solve(a,b,c-1,p[1]) dp[a][b][c][d] = (p[0] + pp[0], pp[1]) return dp[a][b][c][d] else: if c > d: p = solve(a,c-1,1,d-1) pp = solve(a,b,c-1,p[1]) dp[a][b][c][d] = (p[0] + pp[0], pp[1]) return dp[a][b][c][d] else: p = solve(a,b,c,0) dp[a][b][c][d] = (p[0] + 1, p[1]) return dp[a][b][c][d] def ratkaise(x): n = len(x) prefmax = [0]*(n+1) prefmax[0] = ord(x[0]) - ord('0') for i in range(1,n): prefmax[i] = max(prefmax[i-1], ord(x[i]) - ord('0')) ans = 0 digit = ord(x[n-1]) - ord('0') ind = 1 for i in range(n-1,-1,-1): numero = ord(x[i]) - ord('0') if numero != 0: maxi = 0 if i > 0: maxi = prefmax[i-1] p = dp[ind][maxi][numero][digit] ans += p[0] digit = p[1] ind += 1 return ans + 1 for i in range(1,22): for j in range(10): for k in range(1,10): for l in range(10): solve(i,j,k,l) t = int(input()) for i in range(t): a = int(input()) x = 0 b = 2**67 while b >= 1: while ratkaise(str(x+b)) < a: #while(pienempi(str(x+b), a)): x += b b //= 2 print(x+1)
Test details
Test 1
Group: 1, 2, 3
Verdict: ACCEPTED
input |
---|
1000 1 2 3 4 ... |
correct output |
---|
1 10 11 20 22 ... |
user output |
---|
1 10 11 20 22 ... Truncated |
Test 2
Group: 2, 3
Verdict: ACCEPTED
input |
---|
1000 224995 413660 249827 2125 ... |
correct output |
---|
1731724 3216040 1940719 14585 532612 ... |
user output |
---|
1731724 3216040 1940719 14585 532612 ... Truncated |
Test 3
Group: 3
Verdict: TIME LIMIT EXCEEDED
input |
---|
1000 627887018110416188 785474884983906653 653772166720939773 784335285960673683 ... |
correct output |
---|
5530371754830260284 6918696171534226533 5757755627065159149 6908439780325129803 3223801064342340738 ... |
user output |
---|
(empty) |