对于 2019 年 E 轮 codejam 中的第一名(https://codingcompetitions.withgoogle.com/kickstart/round/0000000000050edb/0000000000170721),我的代码可以在我的计算机上成功运行,但在线判断失败(跳过运行时错误测试集)。但是当我在线运行测试时,它可以(完成)。
我应该怎么做才能解决这个问题?
import numpy as np
def DG(conn1,i,A,k):
newk=np.concatenate((np.argwhere(conn1[:,i]==1),np.argwhere(conn1[i,:]==1)),axis=0)
if newk.size>0:
newk=newk.tolist()
newk=sum(newk,[])
k=k+newk
# vertex conencted to i
if len(k)!=0:
for aa in k: # 遍历每个与i连接的node
coco=conn1[aa,range(0,A)]
if 1 in coco:
return 1
else:
conn2=conn1.copy()
conn2[aa,i]=0
k.pop(0)
return DG(conn2,aa,A,k) # vertex connect to aa
else:
return 2
def solve(N,M):
conn=np.zeros((N,N))
for i in range(0,M):
v1,v2=[int(s) for s in input().split(" ")]
v1,v2=sorted([v1,v2])
conn[v2-1,v1-1]=1 # v1<v2
degree=np.zeros((N,1))
for i in range(1,N):
temp=conn[i,range(0,i)]
if 1 in temp: # directly connect to 0:i
degree[i]=1
else: # indirectly connect to 0:i
conn1=conn.copy()
degree[i]=DG(conn1,i,i,[])
return int(np.sum(degree))
case=int(input())
for k in range(1,case+1):
N,M=[int(s) for s in input().split(" ")]
degree=solve(N,M)
print("Case #{}: {}".format(k, degree))
我使用如下官方测试。我可以离线获得这些正确的输出,但在线判断失败。而且我还尝试了一些复杂的测试用例。
2
2 1
1 2
Case #1: 1
3 1
2 3
Case #2: 3