Kattis平台Set!问题第8测试用例失败排查求助
解决Kattis平台Set!问题的排障过程
我正在解决Kattis平台上名为Set!的问题,目前代码始终无法通过第8测试用例(仅通过7/31个用例)。作为初学者,我无法找出代码问题所在。我并非寻求代码优化,只希望基于自己编写的代码进行学习,也不要现成方案,且已尝试过AI工具咨询。
初始解决方案
from sys import stdin ls=[] ls_output=[] ls_final=[] ls_answer=[] output='' for i in stdin: ls+=i.split() ls1=dict(list(enumerate(ls,1))) dc={v:k for k,v in ls1.items()} ls_values=list(ls1.values()) for i in range(len(ls_values)): for j in range(i+1,len(ls_values)): for k in range(j+1,len(ls_values)): ls_output.append([ls[i],ls[j],ls[k]]) for m in ls_output: if all(len(set([m[0][n], m[1][n], m[2][n]])) in [1, 3] for n in range(4))\ and m[0]!=m[1]!=m[2]!=m[0]: ls_final.append(m) if ls_final: for x in ls_final: for y in x: ls_answer.append(dc[y]) for z in range(0,len(ls_answer),3): output+=f'{ls_answer[z]} {ls_answer[z+1]} {ls_answer[z+2]}\n' else: output+="no sets" print(output)
第一次修改尝试(仍未通过第8测试用例)
根据建议移除字典以避免重复问题,但依旧无法通过第8测试用例:
from sys import stdin ls=[] ls_output=[] ls_final=[] ls_answer=[] output='' for i in stdin: ls+=i.split() #enumerated ls1 and then unpacked the tuples to form ls2 ls2=[] ls1=list(enumerate(ls,1)) list(ls2.extend(item) for item in ls1) ##ls1=dict(list(enumerate(ls,1))) ##ls_keys=list(ls1.keys()) ## ####dc={v:k for k,v in ls1.items()} ##ls_values=list(ls1.values()) for i in range(len(ls)): for j in range(i+1,len(ls)): for k in range(j+1,len(ls)): ls_output.append([ls[i],ls[j],ls[k]]) for m in ls_output: if all(len(set([m[0][n], m[1][n], m[2][n]])) !=2 for n in range(4)): ls_final.append(m) if ls_final: for x in ls_final: for y in x: ls_answer.append(ls2[ls2.index(y)-1]) ##ls2=[1,3SOP,2,2DOP,3,1STP..] for z in range(0,len(ls_answer),3): output+=f'{ls_answer[z]} {ls_answer[z+1]} {ls_answer[z+2]}\n' else: output+="no sets" print(output)
最终正确解决方案
保留了原代码的字典部分,移除了易导致索引错误的其他数据结构,现在可通过所有测试用例(感谢@ggorlen):
from sys import stdin stdin=open('std.txt','r') ls=[] ls_final=[] output='' for i in stdin: ls+=i.split() ls1=dict(list(enumerate(ls,1))) for i in range(len(ls)): for j in range(i+1,len(ls)): for k in range(j+1,len(ls)): acc=[] acc.append(ls1[i+1]) acc.append(ls1[j+1]) acc.append(ls1[k+1]) if all(len(set([acc[0][n], acc[1][n], acc[2][n]])) !=2 for n in range(4)): ls_final.append([i+1,j+1,k+1]) ls_final=[j for i in ls_final for j in i] if ls_final: for z in range(0,len(ls_final),3): output+=f'{ls_final[z]} {ls_final[z+1]} {ls_final[z+2]}\n' else: output+="no sets" print(output)
内容的提问来源于stack exchange,提问作者Loki123
相关产品推荐
相关产品推荐

