| Run ID | 作者 | 问题 | 语言 | 测评结果 | 时间 | 内存 | 代码长度 | 提交时间 |
|---|---|---|---|---|---|---|---|---|
| 87020 | sh25_shenpy | ADV-124 凶手 | Python3 | 通过 | 26 MS | 3700 KB | 2155 | 2026-04-10 15:09:31 |
def solve(): suspects = ['A', 'B', 'C', 'D', 'E', 'F'] possible_killers = [] # 遍历每一个嫌疑人,假设他是凶手 for killer in suspects: # 记录当前假设下,每个人说的话是真还是假 # 索引 0-5 对应 A-F truth_values = [False] * 6 # 获取当前凶手的索引 (A=0, B=1, ...) k_idx = suspects.index(killer) # 判断 A 的话: "我不是罪犯" # 如果 A 不是凶手,A 说真话 if k_idx != 0: truth_values[0] = True # 判断 B 的话: "A、C中有一个是罪犯" # 即 (A是凶手) XOR (C是凶手) if (k_idx == 0) ^ (k_idx == 2): truth_values[1] = True # 判断 C 的话: "A和B说了假话" # 即 A说假话 AND B说假话 if (not truth_values[0]) and (not truth_values[1]): truth_values[2] = True # 判断 D 的话: "C和F说了假话" # 即 C说假话 AND F说假话 # 注意:这里需要用到 F 的真假,所以 F 的判断逻辑要先在心里过一遍,或者直接写出来 # F 的话: "我是罪犯" -> 如果 killer 是 F,F 说真话 f_is_truth = (k_idx == 5) if (not truth_values[2]) and (not f_is_truth): truth_values[3] = True # 判断 E 的话: "其他五个人中,只有A和D说了真话" # 即 A真 AND D真 AND B假 AND C假 AND F假 # 注意:这里不包含 E 自己 if (truth_values[0] and truth_values[3] and (not truth_values[1]) and (not truth_values[2]) and (not f_is_truth)): truth_values[4] = True # 判断 F 的话: "我是罪犯" truth_values[5] = f_is_truth # 统计真话的数量 true_count = sum(truth_values) # 如果真话数量正好是 3 (一半),则当前假设的 killer 是可能的凶手 if true_count == 3: possible_killers.append(killer) # 按字母顺序输出结果 for p in sorted(possible_killers): print(p) solve()