例题3.2 一道简单题 UVa11991

1.题目描述:点击打开链接

2.解题思路:本题要求在一串数中找第k个v的下标,,属于数据结构题。我们自然会想:如果能够直接读出data[v][k]该多好。这时,就可以联想到STL中的map。把v当做“键”,由于要找的是第k个,说明“值”是一个不定长的数组,那么自然要使用vector,这样就可以用map<int,vector<int> >a来实现类似于data[v][k]的数据结构了。

3.代码:

#define _CRT_SECURE_NO_WARNINGS #include<iostream>#include<algorithm>#include<string>#include<sstream>#include<set>#include<vector>#include<stack>#include<map>#include<queue>#include<deque>#include<cstdlib>#include<cstdio>#include<cstring>#include<cmath>#include<ctime>#include<functional>using namespace std;map<int, vector<int> >a;int main(){freopen("t.txt", "r", stdin);int n, m, x, y;while (~scanf("%d%d", &n, &m)){a.clear();for (int i = 0; i < n; i++){scanf("%d", &x);if (!a.count(x))a[x] = vector<int>();a[x].push_back(i + 1);//坐标从1开始}while (m–){scanf("%d%d", &x, &y);if (!a.count(y) || a[y].size() < x)printf("0\n");else printf("%d\n", a[y][x – 1]);//在vector中编号是从0开始的,因此是x-1}}return 0;}

爱情要完结的时候自会完结,到时候,你不想画上句号也不行。

例题3.2 一道简单题 UVa11991

相关文章:

你感兴趣的文章:

标签云: