广告牌被分成垂直的条带,每个条带的宽度都相同。一系列的海报相继贴在木板上。海报与广告牌本身的高度相同,贴在广告牌的不同位置,从而准确地覆盖了一系列的条状物。然而,海报的宽度不尽相同,而且可能是贴在一起的。多少海报最终(部分)可见。 编写一个可见函数,该函数包含一个元组列表,其中每个元组包含两个整数。元组描述贴在广告牌上的一系列海报的位置和顺序。第一个元组对应于首先附加的海报。最后一个元组的海报是附加在最后。元组的第一个整数表示海报左侧覆盖的条带的索引,第二个整数表示海报覆盖的条带数。函数应该返回最终(部分)可见的海报数量
问题是可用的:https://www.spoj.com/problems/PROG0412.pdf
def zichtbaar(l):
count = 0, 0
breedte = []
for item in l:
positie = tuple((item[0], item[0] + item[1]))
if positie[0] >= count[0]:
count = positie
print(count)
zichtbaar([(1, 4), (2, 5), (8, 3), (3, 2), (7, 4)])
我不知道怎么解决这个问题
这可能适用于您:
只需反转输入元组的顺序(使用海报),然后检查前一个元组未包含哪些元组。一种方法是建立一个字典,其中包含所有的条带(即代表条带的整数),这些条带之前已经被覆盖。然后,要检查一张海报是否被完全覆盖,您只需检查该海报的所有坐标是否都在字典中
请参见下面的代码:
这将为您提供部分可见的海报列表。要获取数字,只需返回列表的长度
我试过做这个:
请注意,这根本不是解决问题的最佳方法,但我认为它有助于理解如何解决问题
所以我把问题分为三个主要部分: 在第一部分中,我做了一个函数来求广告牌的最小长度。我通过找到海报的开始和长度具有最大值的海报,然后返回一个由n个空字符串组成的列表,其中n是最大值减去1(因为海报,例如,在海报(7,4)中,海报从7开始,而不是8)
然后我做了另一个函数,循环遍历海报序列,并用海报替换空的广告牌的索引(根据海报的post\ seq中的索引在广告牌中放置一个不同的值)
然后在最后一个函数中调用这两个函数,检查公告牌中的所有唯一值,如果有“”,则减去一个(因此那里没有海报)
我尝试了提供的所有3个测试用例,结果都成功了
希望这有帮助
相关问题 更多 >
编程相关推荐