Kick Start 2018 - Round B

Posted xym4869

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Kick Start 2018 - Round B相关的知识,希望对你有一定的参考价值。

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的主要内容,如果未能解决你的问题,请参考以下文章

Google Kick Start 2020 Round A

Google Kick Start 2020 Round B T4 Wandering Robot

Round A 2020 - Kick Start 2020

Round G 2019 - Kick Start 2019

Kick Start Round D 2020(前两题)

Kick Start 2019 Round A Parcels