📅  最后修改于: 2023-12-03 14:58:19.554000             🧑  作者: Mango
有一个特殊的门,如果你向它传递一个数字,它会将该数字相加并返回一个新的数字,但是它还有一种特殊的功能:如果该数字已经传递给门,则门将返回先前返回的数字,否则门将返回数字的总和。现在,给定N个数字和K次查询,每个查询将传递一个数字到门中,你需要为每个查询输出门的返回值。假设将每个数字传递到门中的操作成本为C。
请编写一个程序,其中包含以下功能:
可以假设N和K的值在整数范围内,每次查询的数字不会超过整数范围。
首先,我们需要一个数据结构来存储前一次查询的数字和已经处理的数字的总和。为此,我们可以使用哈希表。哈希表允许我们使用常量时间O(1)来查找数字,并存储如下信息:数字、状态(已处理或未处理)和数字的总和。
当我们收到查询时,我们检查哈希表中是否存在该数字。如果存在,则返回它。否则,我们将数字添加到哈希表中,并将其与前一个数字的总和相加。然后返回数字的总和。
在K个查询的情况下,我们需要进行K次哈希表操作。因此,总成本为K*C。
class Gate:
def __init__(self):
self.table = {}
self.sum = 0
def get(self, num):
if num in self.table:
return self.table[num]
else:
self.sum += num
self.table[num] = self.sum
return self.sum
def main():
gate = Gate()
n = int(input())
k = int(input())
cost = 0
results = []
for i in range(k):
num = int(input())
res = gate.get(num)
cost += 1
results.append(res)
print("Total Cost: ", cost)
print("Results: ", results)
if __name__ == '__main__':
main()
此代码片段是Python 3的实现,它创建了一个名为Gate的类。它使用哈希表来存储数字的状态和数字的总和,并使用get()方法来处理查询。该方法返回数字或返回前一个数字的总和。main()函数获取n、k和K个查询之后,调用它并输出总成本和返回值。