我正在尝试解决"Aaj Kemon Bodh Korcho" problem on Toph:
巴塞罗那和皇家马德里之间存在一场比赛。 [...]有一个 比赛的每一秒都是目标。并非所有目标 有效,即某些目标可以在外边完成 的规则。
[输出]如果巴塞罗那赢得了冠军,则“ Aaj Kemon Bodh Korcho”(不带引号) 如果皇家马德里获胜,则为“ Hala Madrid”(无引号);或 如果没有获胜者,则输入“ Meh:\”(不带引号)。
[...]从旁侧完成的目标属于(原文如此) 著名系列[...]:
0、1、1、2、3、5、8…,…,…,…,…,n个 项
输入
您会得到一个整数 T ,该数字表示测试次数 例(T <= 100)。在(原文如此) T 每行中都包含一个字符串 ( S )以下字符(B,M)。最大长度 字符串不得大于 10 5 。请注意, 起始索引为 0 。
在这里,
如果 i th 字符是 B ,则表示 进球是巴塞罗那在第 i th 秒完成的。
如果 i th 字符是 M ,则表示皇家马德里队在 i th < / sup>秒。输出
对于每个 T 行,您必须先打印案例编号 根据格式 Case #X (案例#X ),其中X是案例编号。然后 如果巴塞罗那赢得比赛,则必须打印 Aaj Kemon Bodh Korcho 或 Hala Madrid (如果皇家马德里赢得了比赛)。否则打印 Meh:\ 。有关更多说明,请参见下面的示例。
样本
Input Output 2 BBMMMM Case #1: Hala Madrid MMBBBB Case #2: Aaj Kemon Bodh Korcho
这是我的代码:
f=[0,1]
num_of_testcase = int(input())
store_2 = []
for i in range(num_of_testcase):
numbers = input()
store_1 = list(numbers)
for x in range(len(store_1)):
f.append(f[x]+f[x+1])
f = sorted(set(f), key=f.index)
for y in f:
try:
del store_1[y]
except:
store_2.append(store_1)
if store_1.count("B") > store_1.count("M"):
print("Case #" + str(int(i+1)) + ":" + " Aaj Kemon Bodh Korcho")
elif store_1.count("B") < store_1.count("M"):
print("Case #" + str(int(i+1)) + ":" + " Hala Madrid")
else:
print("Case #" + str(int(i+1)) + ":" + " Meh :\\")
当我提交我的代码时,它在第二个测试用例上显示CPU Time Exceeded。如何使我的代码运行更快?
答案 0 :(得分:0)
在程序中,您有del store_1[y]
行。根据{{3}},这是O(n)运算。因此,您的代码可以在O(n 2 )中运行。这就是为什么您获得 CPU时间已超过的原因。
维护2个计数器b=0
和m=0
。遍历给定的字符串,查找给定的索引是否是集合的一部分,如果是,则不执行任何操作。否则检查它是B
还是M
。因此,增加计数器并最后进行必要的检查。
此外,您实际上可以生成一次,然后一次又一次地将结果用于测试用例,而不是多次生成斐波那契数列。
答案 1 :(得分:-1)
有几件事会使您的代码变慢:
set
来消除重复项,然后必须对该集合进行排序。如果仅生成唯一的斐波那契数,则不必执行这些操作。del
不是恒定时间操作。您完全不需要删除列表元素。您真的要做的就是计数count
方法,而只执行一次计数就足够了。 您可以保存更多:
这是看起来如何:
num_of_testcase = int(input())
for i in range(num_of_testcase):
goals = input()
balance = 0
# Fibonacci pair
a = 3
b = 5
# Don't bother looking at index 0-3: they are to be ignored
for j in range(4, len(goals)):
if j < b:
balance += 1 if goals[j] == "M" else -1
else:
a, b = b, a+b # Up to next Fibonacci number
if balance < 0:
print("Case #{}: Aaj Kemon Bodh Korcho".format(i+1))
elif balance > 0:
print("Case #{}: Hala Madrid".format(i+1))
else:
print("Case #{}: Meh :\\".format(i+1))