酷代码 AI
菜单
服务商

题目描述 一个班级内有 2n 个小朋友,编号依次为 1,2,...,2n。教室里有 n 张桌子,每张桌子 可以坐两个人。坐在同一张桌子旁边的小朋友互为同桌。一个小朋友的同桌不能是自 己。 老师问每个小朋友想和谁做同桌,i 号小朋友的回答是想和pi号小朋友做同桌。 请你帮老师判断一下,老师能否让每个小朋友都满意? 输入格式 输入的第一行有一个正整数 n,表示桌子的张数。 第二行有 2n 个数 p1,p2,...,p2n,表示每个小朋友想和谁做同桌。 输出格式 如果老师可以让所有小朋友都满意,则输出 Yes,否则输出 No。 输入输出样例 输入 #1 3 2 1 6 5 4 3 输出 #1 Yes 输入 #2 2 1 2 4 3 输出 #2 No 输入 #3 2 2 3 4 1 输出 #3 No 说明/提示 【样例 1 解释】 老师可以让 1,2 号小朋友坐在一张桌子旁,3,6 号小朋友坐在第二张桌子旁,4,5 坐 在第三张桌子旁。 【样例 2 解释】 1 号小朋友的同桌肯定不会是自己(因为每张桌子一定恰好坐 2 个小朋

```cpp #include <iostream> #include <vector> 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]; } for (int i = 0; i < 2 * n; ++i) { int want = p[i] - 1; if (i == want || p[want] != i + 1) { std::cout << "No"; return 0; } } std::cout << "Yes"; return 0; } ``` 代码解释 1. 输入处理: - `std::cin >> n;`:读取桌子的数量 `n`。 - `std::vector<int> p(2 * n);`:创建一个大小为 `2 * n` 的整数向量 `p`,用于存储每个小朋友想和谁做同桌的信息。 - 通过 `for` 循环读取每个小朋友想和谁做同桌的编号并存储到 `p` 中。 2. 判断逻辑: - 使用 `for` 循环遍历每个小朋友。对于当前小朋友 `i`,获取其想和做同桌的小朋友编号 `want`(这里减 1 是为了将编号转换为 0 索引)。 - 检查两个条件:一是 `i` 是否等于 `want`,即小朋友是否想和自己做同桌;二是 `p[want]` 是否等于 `i + 1`,也就是对方想和做同桌的人是否是当前小朋友。如果这两个条件中有一个不满足,就输出 `No` 并结束程序。 3. 输出结果: - 如果循环结束都没有发现不满足条件的情况,说明所有小朋友都能满意,输出 `Yes`。 [2025-11-16 20:07:02 | AI问答 | 445点数解答]

相关提问
发财导航,免费问AI
实用工具查看更多