资源限制
时间限制:1.0s 内存限制:256.0MB
问题描述
ABCDE中num个人做了好事,truth个人说真话。
A说:“我和X中有且只有一个做了好事”
B说:“C和E中有人做了好事”
C说:“我和D和A中有人做了好事”
D说:“B和C都没有做好事”
E说:“我没有做好事”
请问有哪些人做了好事?
多组方案请一行一个输出。
输入格式
仅一行,先是一个整数num,接着是一个A~E的字符X,最后是一个整数truth。意义见题面。
输出格式
每行输出一组方案,方案中按 字母序 输出做好事的人的代号(A~E),不要空格隔开。
如果没有合法方案,输出一行一个0即可。
样例输入
1 E 2
样例输出
0
样例输入
2 E 2
样例输出
BD
BE
数据规模和约定
规定,1 <= num <= 2。
mport ipdb
#bool good[5] = [False]*5
good = {}
dices = []
#A
def talk(who):
if who == 'A':
return good['A'] and not good['E'] or good['E'] and not good['A']
elif who == 'B':
return good['C'] or good['E']
elif who == 'C':
return good['C'] or good['A'] or good['D']
elif who == 'D':
return not good['B'] and not good['C']
elif who == 'E':
return not good['E']
def comp(a, cnt, res, k):
if len(res) == k:
dices.append(res)
return
if len(a) > 0:
tmp = [r for r in res]
tmp.append(a[0])
comp(a[1:], cnt-1, tmp, k)
tp = [r for r in res]
comp(a[1:], cnt, tp, k)
if __name__ == '__main__':
# 组合数
num = 2
truth = 2
comp(list('ABCDE'), num, [], num)
print(dices)
for dice in dices:
good = {x:False for x in list('ABCDE')}
for x in dice:
good[x] = True
cnt = 0
for xx in list('ABCDE'):
if talk(xx):
cnt += 1
if truth == cnt:
print(dice)
print(cnt)