用c++完成这道题:题目描述 给定一个 nn 个数的数组 aa (保证 nn 个数互不相同),再给定 mm 次询问,每次询问一个整数 xx 在数组 aa 中出现的位置,如果存在输出该数在 aa 数组中出现的位置,不存在输出 00 。 输入 第 11 行是一个整数 nn(5≤n≤10^55≤n≤10 5 )。 第 22 行有 nn 个整数,数与数之间用空格隔开。 第 33 行有一个整数 mm(5≤m≤10^55≤m≤10 5 )。 接下来 mm 行,每行有一个整数。 输出 输出 mm 行,每行输出每次查询的整数在 aa 数组中的位置,如果该数不存在,输出 00。 样例 输入复制 5 1 5 2 4 6 5 5 1 8 9 0 输出复制 2 1 0 0 0 说明 【注意】 由于本题读入、输出的数据较多,C++选手请使用scanf和printf 替代 cin和cout 提升读写效率。
时间: 2024-03-10 13:51:00 浏览: 149
以下是C++代码实现:
```c++
#include <cstdio>
#include <unordered_map>
using namespace std;
int main() {
int n, m;
scanf("%d", &n);
unordered_map<int, int> mp; // 建立哈希表
for (int i = 1; i <= n; i++) {
int x;
scanf("%d", &x);
mp[x] = i; // 将每个数的位置存入哈希表
}
scanf("%d", &m);
while (m--) {
int x;
scanf("%d", &x);
if (mp.count(x)) { // 判断该数是否存在
printf("%d ", mp[x]);
} else {
printf("0 ");
}
}
return 0;
}
```
解释一下代码实现:
首先读入整数n,然后使用unordered_map(哈希表)来存储每个数在数组中的位置,读入时将每个数的位置存入哈希表。
然后读入整数m,进行m次查询,对于每次查询,判断该数是否在哈希表中出现过,如果出现过则输出该数在数组中的位置,否则输出0。
阅读全文