擅长:python、mysql、java
<p>有几件事会减慢代码的速度:</p>
<ul>
<li>从0开始使用<em>x</em>,以复制您已经为上一个测试用例生成的相同斐波那契数。你应该只生成那些你还没有的</李>
<li>由于上一点,您需要通过应用<code>set</code>来消除重复项,然后必须对该集进行排序。如果只生成唯一的斐波那契数,则不必执行这些操作</李>
<li><code>del</code>不是一个常数时间操作。您根本不需要删除列表元素。你真正需要做的就是数数</li>
<li>在一个测试用例中,您可能会调用<code>count</code>方法四次,而它应该足够只执行一次计数</李>
</ul>
<p>您可以保存更多信息:</p>
<ul>
<li>实际上,不要将斐波那契数存储在列表中,只需将最后两个值保留在内存中,并在索引达到当前斐波那契数时生成下一个值</li>
<li>保持一个平衡,当马德里得分更多时,它将变为正,当巴塞罗那得分更多时,它将变为负</李>
</ul>
<p>下面是它的样子:</p>
<pre><code>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))
</code></pre>