题目:UVA11991Easy Problem from Rujia Liu?(map + vector)
题目大意:给你N个数字,这些数字可能有重复,然后M个查询,问第k个V的下标是,如果不存在这样的数字输出0。
解题思路:用map来将每个数字和下标做一一映射,但是因为相同数字会出现多次,所以需要一个数组,并且长度不一定,所以用vector。
代码:
#include <cstdio> #include <map> #include <vector> using namespace std; map<int , vector<int> > vis;//不要连写 int main () { int n, m; int v, k; while (scanf ("%d%d", &n, &m) != EOF) { vis.clear();//清空 for (int i = 1; i <= n; i++) { scanf ("%d", &v); if (!vis.count(v)) vis[v] = vector<int> ();//创建数组 vis[v].push_back(i); } for (int i = 0; i < m; i++) { scanf ("%d%d", &k, &v); if (!vis.count(v) || vis[v].size() < k) printf ("0\n"); else printf ("%d\n", vis[v][k - 1]); } } return 0; }
时间: 2024-10-07 04:17:20