非闭环电路:
遍历列表找到能输出的器件,遍历过程如下
NAND 2 O2 O3 #4,第三次遍历输出O1 NAND 2 I1 O4 #2,第二次遍历输出O2 NAND 2 I2 O4 #3,第二次遍历,输出O3 NAND 2 I1 I2 #1,第一次遍历输出O4, NAND 2 O6 O7 #8,第五次遍历输出O5 NAND 2 O1 O8 #6,第四次遍历输出O6 NAND 2 I3 O8 #7,第四次遍历输出O7 NAND 2 O1 I3 #5,第三次遍历输出O8
闭环电路:
情况1:无全是输入的信号的情况
遍历全部无输出,则为闭环
NOR 2 O4 I2 AND 2 O4 O6 XOR 2 O5 O1 NOT 1 O6 NAND 2 O2 O2 AND 2 I1 O3
情况2:有全是输入信号,但存在有闭环
遍历第一遍时有输出O1,遍历第二遍时无输出
AND 2 I1 I2 AND 2 O1 O3 AND 2 I3 O2测试用例
输入样例1:
1 3 5 XOR 2 I1 I2 XOR 2 O1 I3 AND 2 O1 I3 AND 2 I1 I2 OR 2 O3 O4 4 0 1 1 1 0 1 1 1 1 0 0 0 2 5 2 2 5 2 2 5 2 2 5 2
输出样例1:
1 0 1 0 1 1 0 0
输入样例2:
1 2 6 NOR 2 O4 I2 AND 2 O4 O6 XOR 2 O5 O1 NOT 1 O6 NAND 2 O2 O2 AND 2 I1 O3 2 0 0 1 0 3 2 3 4 6 1 2 3 4 5 6
输出样例2:
LOOP
输入样例3:
1 3 9 AND 3 I1 I2 I3 OR 3 I1 I2 I3 AND 2 I1 I2 AND 2 I1 I3 AND 2 I2 I3 OR 2 O1 O7 AND 2 O2 O8 NOT 1 O9 OR 3 O3 O4 O5 8 0 0 0 0 0 1 0 1 0 0 1 1 1 0 0 1 0 1 1 1 0 1 1 1 2 6 9 2 6 9 2 6 9 2 6 9 2 6 9 2 6 9 2 6 9 2 6 9
输出样例3:
0 0 1 0 1 0 0 1 1 0 0 1 0 1 1 1
输入样例4:
1 3 8 NAND 2 O2 O3 NAND 2 I1 O4 NAND 2 I2 O4 NAND 2 I1 I2 NAND 2 O6 O7 NAND 2 O1 O8 NAND 2 I3 O8 NAND 2 O1 I3 8 0 0 0 0 0 1 0 1 0 0 1 1 1 0 0 1 0 1 1 1 0 1 1 1 1 5 1 5 1 5 1 5 1 5 1 5 1 5 1 5
输出样例4:
0 1 1 0 1 0 0 1
输入样例5:
1 3 3 AND 2 I1 I2 AND 2 O1 O3 AND 2 I3 O2 1 1 1 1 1 1
输出样例5:
LOOP代码
def is_NOT(n):
if(n==1):
return 0
return 1
def is_AND(args):
if args.count(1)== len(args):
return 1
return 0
def is_OR(args):
if(args.count(1)>=1):
return 1
return 0
def is_XOR(args):
xor=args[0]
for i in range(1,len(args)):
xor=xor ^ args[i]
return xor
def is_NAND(args):
if args.count(1) == len(args):
return 0
return 1
def is_NOR(args):
if (args.count(1) >= 1):
return 0
return 1
q=int(input())
while(q>0):
q-=1
n,m=map(int,input().split())
in_list = []
for i in range(m):
in_list.append(list(map(str,input().split())))
s=int(input())#输入S行
s_list = [] #存储接下来输入的2s行
for j in range(2*s):
s_list.append(list(map(int, input().split())))
if(j0):
disable_Out=0
in_cout+=1
if(in_cout==max):
in_cout=0
continue
if (in_list[in_cout][0] == "NOT"):
zip_out[in_cout + 1] = is_NOT(lis[0])
elif (in_list[in_cout][0] == "AND"):
zip_out[in_cout + 1] = is_AND(lis)
elif (in_list[in_cout][0] == "OR"):
zip_out[in_cout + 1] = is_OR(lis)
elif (in_list[in_cout][0] == "XOR"):
zip_out[in_cout + 1] = is_XOR(lis)
elif (in_list[in_cout][0] == "NAND"):
zip_out[in_cout + 1] = is_NAND(lis)
elif (in_list[in_cout][0] == "NOR"):
zip_out[in_cout + 1] = is_NOR(lis)
in_cout+=1
if(len(zip_out)==m):
break
elif(first_Disable_Out!=-1):
in_cout = first_Disable_Out
first_Disable_Out=-1
if(in_cout==max):
max-=1
if (loop!=1):
for jj in range(1,s_list[j][0]+1):
print(zip_out[s_list[j][jj]],end=" ")
print()
else:
break
if(loop==1):
print("LOOP")



