码迷,mamicode.com
首页 > 其他好文 > 详细

Kick Start 2018 - Round B

时间:2020-07-04 18:48:28      阅读:57      评论:0      收藏:0      [点我收藏+]

标签:http   enum   code   pytho   range   +=   不能   res   python   

1. No Nine

Q: 求 [L, R] 的合法数字个数,合法数字是不能包含9也不能被9整除。L和R一定合法。
A:

  1. 自己的想法:区间内多少含有9的数字,多少9的倍数,多少又包含9又是9的倍数,分别计算出来。区间内如果不好求,就写一个函数,是[1,x]内的数字个数,然后[1,R]-[1,L]
  2. 官解:先把问题变成子问题,即上述的,把问题换成[1,N],则
res = count(R)-count(L)+1 # 因为L肯定是合法数字

count函数:(没有很看懂)

def count(N):
	res = 0
	L = len(str(N)
	for i,v in enumerate(str(N):
		if i < L - 1:
                        # int(v)是该位值,后面每位都有0-8共9个数字进行选择,除了最后一位。最后一位9个数字是连续的,必有一个数字可以被9整除,是不合法的。
			res += int(v) * (9 ** (L - 2 - i)) * 8 
		else:
			for i in range(N - N % 10, N + 1): # 最后一位
				if i % 9 > 0:
					res += 1
                        # 或者上面三行等同于下面一行
                        # res += N % 10 + (N % 9 > N % 10)
	return res
  1. DFS或DP

代码可参考:Code Jam Kickstart Round B 2018 题解

Kick Start 2018 - Round B

标签:http   enum   code   pytho   range   +=   不能   res   python   

原文地址:https://www.cnblogs.com/xym4869/p/13235998.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!