巧判小朋友同桌意愿:满足需求还是无解难题?
```cpp #include <iostream> #include <vector> // 判断是否能让所有小朋友满意的函数 bool canSatisfyAll(const std::vector<int>& p) { int n = p.size() / 2; std::vector<bool> paired(2 * n + 1, false); for (int i = 1; i <= 2 * n; ++i) { if (paired[i]) continue; int want = p[i - 1]; if (want == i || paired[want] || p[want - 1] != i) { return false; } paired[i] = true; paired[want] = true; } return true; } int main() { int n; std::cin >> n; std::vector<int> p(2 * n); for (int i = 0; i < 2 * n; ++i) { std::cin >> p[i]; } if (canSatisfyAll(p)) { std::cout << "Yes" << std::endl; } else { std::cout << "No" << std::endl; } return 0; } ``` 代码解释 1. `canSatisfyAll`函数: - 该函数接受一个存储每个小朋友想和谁做同桌信息的向量`p`作为参数,用于判断是否能让所有小朋友满意。 - 首先,通过`p.size() / 2`得到桌子的数量`n`,并创建一个布尔类型的向量`paired`,其大小为`2 * n + 1`,用于标记每个小朋友是否已经配对。 - 遍历每个小朋友,对于未配对的小朋友`i`,获取其想和谁做同桌的信息`want`。 - 检查`want`是否等于`i`(即自己想和自己做同桌)、`want`是否已经配对、以及`want`想和做同桌的人是否是`i`,若不满足条件则返回`false`。 - 若满足条件,则将`i`和`want`标记为已配对。 - 若所有小朋友都能成功配对,则返回`true`。 2. `main`函数: - 首先读取桌子的数量`n`。 - 然后读取每个小朋友想和谁做同桌的信息,存储在向量`p`中。 - 调用`canSatisfyAll`函数进行判断,根据返回值输出`Yes`或`No`。 ######[AI问答 | 599点数解答 | 2025-11-16 20:06:12]
- Qt6+C+++QML+CMake+MSVC2019:极简实现摄像头画面获取、截图并内存显示(GPT | 2422点数解答 | 2024-12-09 14:37:29)178
- C++ 实现:根据给定正整数构造 3×3 方阵并计算满足条件的方案数(阿里通义 | 875点数解答 | 2024-11-13 16:38:24)247
- C++实现:低复杂度求解 3×3 方阵构造方案数(阿里通义 | 708点数解答 | 2024-11-13 16:45:15)282
- Python 高效解决 U 王国社区端午节粽子分配数量计算问题(DeepSeek | 218点数解答 | 2025-05-31 18:33:52)196
- C++ 实现:根据家庭人数精准计算 U 王国社区粽子分配总数(DeepSeek | 250点数解答 | 2025-05-31 18:36:11)166
- 幼儿园小朋友学号奇偶分类:代码实现与详细解释(字节豆包 | 406点数解答 | 2025-11-26 19:39:05)58
- 策略游戏大揭秘:小 L 与小 Q 最优策略下每轮得分计算全解析(字节豆包 | 676点数解答 | 2025-12-12 18:49:42)61
- Python代码:简化网友国度货币系统,求解最小货币种数(字节豆包 | 529点数解答 | 2025-12-13 10:29:25)47
- 数轴旅行:从原点出发,能否到达目标位置?(字节豆包 | 225点数解答 | 2026-01-23 19:51:03)44
- Python 实现:计算特殊规则矩阵行列式并对 109+7 取模(字节豆包 | 672点数解答 | 2026-02-05 20:46:07)43
- 揭秘!Angular.js 究竟是 MVC 还是 MVVM 框架?(阿里通义 | 65点数解答 | 2023-11-09 01:18:42)319
- Java开发必知:HashMap与TreeMap的抉择秘籍(百度文心 | 258点数解答 | 2023-11-09 16:39:36)264