## 立方体塔
题目描述
小方有w个白色立方体和b个黑色立方体,现在小方想把它们堆成一个立方体塔。
一座高度为h的立方体塔,最底层有h个立方体,每往上一层,所需立方体减一,直到最高层,只需要1个立方体。
为了让这座塔看起来比较美观,小方希望,每一层都只能用一种颜色的立方体。小方希望把这座塔叠得尽可能高,因此他想知道,塔的最大高度是多少,以及这个高度的立方体塔能有几种。
- 输入描述
包含两个数字,w、b,代表有白色立方体w个、黑色立方体b个。
对于10%的数据: 0 <= w,b <= 200
对于20%的数据: 0 <= w,b <= 5000
对于100%的数据: 0 <= w,b <= 10^5
数据保证w+b >= 1
- 输出描述
包含两个数字,h、c,代表塔最高高度为h,有c种不同的此高度的塔。
由于塔的种类有可能很多,请将塔的种类数c对1000000007(10^9+7)取模。
-
示例1
- 输入
1 1
- 输出
1 2
-
示例2
- 输入
4 6
- 输出
4 2
- 说明
两组高度为4的塔的颜色从底到顶分别为:白黑黑黑,黑白黑白。
待续
import sys
def cube_tower(white, black):
high = 0
seen = set()
while True:
current = ''
for nu in range(15, 0, -1):
if nu > white and nu > black:
continue
if nu <= white:
white -= nu
current += 'w'
continue
if nu <= black:
black -= nu
current += 'b'
continue
if len(current) > high:
seen.clear()
high = len(current)
seen.add(current)
elif len(current) == high:
seen.add(current)
break
return high, len(seen), seen
if __name__ == '__main__':
white, black = None, None
for line in sys.stdin:
white, black = map(int, line.strip().split())
break
print(cube_tower(white, black))
变量名拆分
题目描述
有一天小赵正在愉快的敲代码,小钱说:小赵,你这个变量的名字取的可读性不行啊,我都不知道哪里到哪里代表什么意思。小赵不服气的说:那你给我一组变量名,我保证我的变量名可以拆开,而且拆开的每一个变量名都在你这组变量名中出现。现在小钱提供了一组不含重复变量名的列表,你能判断小赵的变量名是否能够拆分为多个小钱提供的变量名吗,能则输出True,不能则输出False。
说明:可以重复使用小钱提供的变量名,输入变量名长度均不超过10000,变量名个数不超过10000。
- 输入描述
第一行输入待拆分的变量名,第二行输入多个变量名,以空格隔开
- 输出描述
根据能不能拆分输出True或者False
-
示例1
- 输入
thisisadog this thisis is a dog
- 输出
True
集合消除相同元素
import sys
def variable_split(sentence, seq):
seen, num = set(), len(sentence)
while True:
if len(seen) == len(seq):
break
current, variables = '', set()
idx = 0
for su in seq:
if su in seen:
if idx == 0:
continue
if su in sentence[idx:] and sentence.index(su, idx) != idx:
continue
try:
idx = sentence.index(su, idx) + len(su)
current += su
variables.add(su)
except ValueError:
continue
if idx == num:
seen.update(variables)
break
else:
return False
return True
if __name__ == '__main__':
input_content = []
for line in sys.stdin:
input_content.append(line.strip())
if len(input_content) == 2:
break
sentence = input_content[0]
variable_name = input_content[1].split()
print(variable_split(sentence, variable_name))
(最近更新:2019年06月16日)