이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
a, b = map(int, input().split())
dp = [[[0 for i in range(11)] for i in range(11)] for i in range(20)]
dp[0][10][10] = 1
for dig in range(1, 19):
for cur in range(10):
for prev in range(11):
if cur == prev:
continue
for prev2 in range(11):
if prev2 == cur:
continue
dp[dig][cur][prev] += dp[dig-1][prev][prev2]
## dig = 1
##d = 5
"""
ans = 1
for dig in range(1, d+1):
for cur in range(1, 11):
for prev in range(11):
ans += dp[dig][cur][prev]
"""
def solve(x):
if x == 0:
return 0
ans = 1
x = list(str(x))
for dig in range(1, len(x)):
for cur in range(1, 11):
for prev in range(11):
ans += dp[dig][cur][prev]
#print(ans)
chk = [11,11]
for i, ch in enumerate(x):
#if i == len(x)-1: continue
d = len(x) - i
#print(d, ch)
val = int(ch)
for cur in range(0, val):
if chk[-1] == chk[-2] and chk[-1] != 11: continue
if chk[-1] == 11 and cur == 0:
continue
if cur == chk[-1] or cur == chk[-2]:
continue
for prev in range(11):
if prev == chk[-1]: continue
ans += dp[d][cur][prev]
#print(ans)
chk[-2] = chk[-1]
chk[-1] = val
return ans
print(solve(b+1)-solve(a))
"""
ans_brute = 0
for n in range(a, b+1):
st = str(n)
is_pal = False
for l in range(len(st)):
for r in range(l+2, len(st)+1):
if st[l:r] == st[l:r][::-1]:
is_pal = True
if not is_pal:
ans_brute+=1
print(ans_brute)
#print(ans, ans_brute)"""
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |