1 条题解
-
0
📝 题目大意
有三个人(编号 1, 2, 3),其中一人吃了蛋糕。两位目击者分别指出人 A 和人 B 不是犯人。问能否唯一确定犯人,若能则输出其编号,否则输出 -1。
💡 解题思路
-
题目分析:
- 数据范围极小:,直接枚举都能过。
- 关键条件:两个目击者提供的信息是"排除"而非"指认"——即 A 和 B 都不是犯人。
- 总共只有 3 个人,排除 2 个不同的人即可唯一确定犯人。
-
算法推导:
- 若 ,则两个人被排除,剩下的唯一一个人就是犯人。由于编号为 1、2、3,利用 的性质,犯人编号 = 。
- 若 ,则只排除了一个人,剩下两人都有可能,无法唯一确定,输出 -1。
- 标准代码中使用了枚举所有 的情况(共 6 种),本质上是 的展开写法。
-
边界与细节:
- 时必须输出 -1(见样例 2:1 1 → 无法确定是 2 还是 3)。
- 输入保证 ,无需额外校验。
⏱️ 复杂度分析
- 时间复杂度:
- 空间复杂度:
💻 标准代码 (C++)
#include <iostream> using namespace std; int main() { int a, b; cin >> a >> b; // 若两次指认的是同一个人,则无法唯一确定犯人 if (a == b) { cout << "-1" << endl; } else if (a == 1 && b == 2) { cout << "3" << endl; // 1和2被排除,犯人是3 } else if (a == 1 && b == 3) { cout << "2"; // 1和3被排除,犯人是2 } else if (a == 2 && b == 1) { cout << "3" << endl; // 2和1被排除,犯人是3 } else if (a == 2 && b == 3) { cout << "1" << endl; // 2和3被排除,犯人是1 } else if (a == 3 && b == 1) { cout << "2" << endl; // 3和1被排除,犯人是2 } else if (a == 3 && b == 2) { cout << "1" << endl; // 3和2被排除,犯人是1 } return 0; } -
- 1
信息
- ID
- 801
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- (无)
- 递交数
- 1
- 已通过
- 1
- 上传者