酷代码 AI
菜单
服务商

c++题目描述 禾木决定在自家的院子里种一排果树。他从自家门前开始,每隔一米挖了一个坑用来种树,已知禾木共挖了n个坑,并给这些挖坑的位置编号1、2、3、4、 ...、n。现在禾木需要从这n个位置中选择一些种上果树,禾木很快想出来两套方案,这两套方案都很好,禾木犹豫不决。最终,在小核桃的建议下,禾木决定同时采纳两套方案。具体来说,对于每个挖了坑的位置,只要两套种树方案中有一套选择在此地种树,禾木就会在此地种一棵树。当然了,一个坑中只能种一棵树。所以即使两套方案都决定在同一个位置种树,禾木也只会在这个位置种一棵树。现在禾木想要知道他一共需要种多少棵树。作为禾木的朋友,请你设计一个程序,帮禾木解决这个问题吧。 输入描述 输入共三行, 第一行包含三个数字,n,x,y,其中n代表禾木挖坑的数量,x代表第一套方案种树的数量,y代表第二套方案种树的数量。数字之间用空格隔开。 第二行包含x个整数,为第一套方案种树的位置编号,数字之间用空格隔开。 第三行包含y个整数,为第二套方案种树的位置编号,数字之间用空格隔开。 输出描述 共一行,包含一个整数,为禾木种树的数量。

```cpp #include <iostream> #include <vector> #include <unordered_set> int main() { int n, x, y; // 读取挖坑数量n,第一套方案种树数量x,第二套方案种树数量y std::cin >> n >> x >> y; // 用于存储第一套方案种树的位置 std::vector<int> plan1(x); for (int i = 0; i < x; ++i) { std::cin >> plan1[i]; } // 用于存储第二套方案种树的位置 std::vector<int> plan2(y); for (int i = 0; i < y; ++i) { std::cin >> plan2[i]; } // 使用unordered_set来存储所有要种树的位置,自动去重 std::unordered_set<int> treePositions; for (int pos : plan1) { treePositions.insert(pos); } for (int pos : plan2) { treePositions.insert(pos); } // 输出种树的数量,即unordered_set的大小 std::cout << treePositions.size() << std::endl; return 0; } ``` 我在以往的开发过程中,碰到过以下几点需要格外小心处理的地方: 1. 输入时要确保输入的位置编号在合法范围内(1到n之间),虽然本题未要求检查,但实际应用中可能需要添加边界检查。 2. 使用`unordered_set`时要注意其特性,插入和查找操作的平均时间复杂度是O(1),但在极端情况下可能会退化。 3. 要注意输入的位置编号可能会有重复,使用`unordered_set`可以避免重复计数,但如果使用其他数据结构需要额外处理重复问题。 [2025-12-28 15:13:56 | AI写代码神器 | 419点数解答]

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