为了快速读取整数,我一直在使用
cases = int(next(sys.stdin))
而不是较慢的
cases = int(sys.stdin.readline())
在我使用这个的每一个问题中,我都得到了更好的时机,但是在这个 SPOJ 问题和相同的 codechef 问题的情况下,我使用第二个而不是第一个得到了更好的结果。我不知道为什么会这样。
对于这个特定问题,与第一种方法相比,第二种方法突然变得更快的原因是什么?
这里是 SPOJ 的Timing 结果和 codechef的计时结果
我使用的 2 个完整代码是
import sys
from itertools import islice
def p():
cases = int(next(sys.stdin))
string = [i[:len(i) -1] for i in islice(sys.stdin, cases)]
for i in string:
ops, ans = [], []
for c in i:
if c in ['+', '-', '*', '/', '^']:
ops.append(c)
elif c == ')':
ans.append(ops.pop())
elif c == '(':
pass
else:
ans.append(c)
print ''.join(ans)
p()
第二个是
import sys
from itertools import islice
def p():
cases = int(sys.stdin.readline())
string = [i[:len(i) -1] for i in islice(sys.stdin, cases)]
for i in string:
ops, ans = [], []
for c in i:
if c in ['+', '-', '*', '/', '^']:
ops.append(c)
elif c == ')':
ans.append(ops.pop())
elif c == '(':
pass
else:
ans.append(c)
print ''.join(ans)
p()