班级里面有2∗n位同学,姓名互不相同,将他们两两分组分成了n组。 现在告诉你n组同学的具体分组情况,请回答老师的q个问题。 每个问题给你一个字符串表示同学A的姓名,对于每个问题请你输出和他组队的同学名称。
时间: 2024-05-15 09:19:59 浏览: 8
这道题可以用哈希表来存储每个同学和他的组员。具体来说,我们可以用一个哈希表`pairs`,其中键为同学的姓名,值为他的组员的姓名。遍历每个分组,将分组中的两个同学加入到`pairs`中,分别作为对方的组员。最后,对于每个问题给定的同学A,我们可以通过查询哈希表`pairs`来找到他的组员。
具体的实现可以参考以下代码:
```
#include <iostream>
#include <unordered_map>
#include <string>
using namespace std;
int main() {
int n, q;
cin >> n >> q;
unordered_map<string, string> pairs; // 哈希表存储每个同学和他的组员
for (int i = 0; i < n; i++) {
string a, b;
cin >> a >> b;
pairs[a] = b;
pairs[b] = a;
}
for (int i = 0; i < q; i++) {
string a;
cin >> a;
cout << pairs[a] << endl;
}
return 0;
}
```
时间复杂度:O(n+q),其中n为同学的数量,q为问题的数量。遍历n个同学和q个问题,查询哈希表的时间复杂度为O(1)。
相关问题
n 个正整数 ,请你找出这些正整数中一共有多少个互不相同的正整数。c++
可以使用 `unordered_set` 来实现。`unordered_set` 是 C++ STL 中的一个容器,它可以自动去重并且哈希查找,因此效率比 `set` 更高。以下是示例代码:
```c++
#include <iostream>
#include <unordered_set>
using namespace std;
int main() {
int n;
cin >> n;
unordered_set<int> s;
for (int i = 0; i < n; i++) {
int x;
cin >> x;
s.insert(x);
}
cout << s.size() << endl;
return 0;
}
```
首先输入正整数个数 `n`,然后利用 `for` 循环输入这 n 个正整数,并将它们插入到 `unordered_set` 中。最后输出 `unordered_set` 的大小即可。
将整数n分为k份,每份分得的数互不相同
题目要求将整数n分成k份,每份得到的数互不相同。
这是一道组合数学的问题,计算方法是先将n个不同的球排成一排,然后在n-1个间隔中插入k-1个隔板,然后每一份的球数即为两个隔板之间的球的个数。最后的答案是C(n-1, k-1)。