[编辑以反映新发现并在SPOJ上传递代码]
通常,当使用python进行spoj时:
-
不要使用“原始输入”,使用sys.stdin.readlines()。这会对大输入产生影响。另外,如果可能的话(也就是说,对于这个问题),立即读取所有内容(sys.stdin)。readlines(),而不是逐行读取(“for line in sys.stdin…”)。
-
同样,不要使用“print”,使用sys.stdout.write()-并且不要忘记“\n”。当然,这只在多次打印时才相关。
-
正如S.Mark建议的,使用psyco。它既适用于Spoj的python2.5也适用于python2.6(测试一下,它就在那里,而且很容易发现:使用psyco的解决方案通常有大约35MB的内存使用偏移)。这很简单:只需在“import sys”:import psyco;psyco.full()之后添加即可。
-
正如Justin所建议的,将代码(psyco咒语除外)放在一个函数中,并在代码末尾简单地调用它。
-
有时,创建列表并检查其长度可能比创建列表并添加其组件更快。
-
支持列表理解(和生成器表达式,如果可能的话)而不是“for”和“while”。对于某些构造,map/reduce/filter还可以加快代码的速度。
根据这些指导方针,我成功地通过了无遗嘱。不过,仍在测试替代方案。