Python3代码
import re
days=('Monday','Tuesday','Wednesday','Thursday','Friday','Saturday','Sunday')
names=[]
ps=[re.compile(x) for x in (r'^([A-Z]+): I am guilty.$',r'^([A-Z]+): I am not guilty.$',r'^([A-Z]+): ([A-Z]+) is guilty.$',r'^([A-Z]+): ([A-Z]+) is not guilty.$',r'^([A-Z]+): Today is ([A-Za-z]+).$')]
book={}
ans=set()
def lie(name,day,guilty):
if not book[name]:
return None
for x in book[name]:
if x[1]==1 and x[0]!=guilty:
return True
if x[1]==0 and x[0]==guilty:
return True
if x[1]==2 and x[0]!=day:
return True
return False
n,m,p=[int(x) for x in input().split(' ')]
for x in range(n):
s=input()
names.append(s)
for x in names:
book[x]=[]
for x in range(p):
s=input()
results=[x.findall(s) for x in ps]
if results[0]:
book[results[0][0]].append((results[0][0],1))
if results[1]:
book[results[1][0]].append((results[1][0],0))
if results[2]:
book[results[2][0][0]].append((results[2][0][1],1))
if results[3]:
book[results[3][0][0]].append((results[3][0][1],0))
if results[4]:
book[results[4][0][0]].append((results[4][0][1],2))
for day in days:
for guilty in names:
minn=0
maxn=0
for name in names:
k=lie(name,day,guilty)
if k==True:
minn+=1
maxn+=1
elif k==None:
maxn+=1
if minn<=m<=maxn:
ans.add(guilty)
if len(ans)==1:
print(tuple(ans)[0])
elif len(ans)==0:
print('Impossible')
else:
print('Cannot Determine')
测试点1,程序输出HELLO,正确答案HELLO,读到Cannot Determine