我在Codechef做一些练习题。有一个称为歧义排列的问题:
我对此的解决方案是:
while 1:
cnt = int(raw_input())
if cnt == 0:
break
vals = [int(u) for u in raw_input().split(' ')]
valr = []
for i in range(cnt):
valr.append(vals.index(i+1)+1)
if vals == valr:
print 'ambiguous'
else:
print 'not ambiguous'
当我在Trypython.org中检查它时,它按预期工作。但是当我在 Codechef 中提交解决方案时,它超时了。
我的问题是这个。代码有什么问题(/可以改进),还是有什么特定的方法来处理测试机器的 sysin 和输出?
[编辑] 接受的解决方案提供了一些很好的建议,我重新考虑了代码逻辑并相应地修改了代码。代码现在可以在一段时间内运行,尽管它因错误答案而失败(尽管无法在我的测试用例中复制错误答案)。感谢您的建议。
import sys
def ambigcheck(lis):
amb = 'ambiguous'
for i in range(1,len(lis)+1):
if lis[lis[i-1]-1] != i:
amb = 'not ambiguous'
break
return amb
while 1:
cnt = int(sys.stdin.readline())
if cnt == 0:
break
vals = [int(u) for u in sys.stdin.readline().split(' ')]
sys.stdout.write(ambigcheck(vals))