Uva 11991 Easy Prblem from Rujia Liu ?
【题意讲解】
本题讲的是给定一组数据,让你输出第k个v的下标。采用一般的方法本题是可以做出来的(数据(k,v)量较小)。对于数据量较大的情况那么这种方法就不适用了(会浪费大量能够空间)。那么我可以考虑使用一种叫map容器的方法。采用动态存储的方法,不浪费
空间。
【map容器简介】
见c++map容器 简介
【本题代码】
1 #include<iostream> 2 #include<vector> 3 #include<map> 4 using namespace std; 5 map<int ,vector<int> >a;//第一个int是代表关键字的意思,第二个vector<int>代表关键字为第一个int的不定数组 6 int main() 7 { 8 int n,m,x,y; 9 while(scanf("%d%d",&n,&m)==2) 10 { 11 a.clear();//清除map 容器中原有的内容 12 for(int i=0;i<n;i++) 13 { 14 scanf("%d",&x); 15 if(!a.count(x)) //如果关键字不存在那么count函数 返回值为0;否则为1 16 a[x]=vector<int>();//动态分配vector 17 a[x].push_back(i+1);//把数据压入数组a[x]中,此时的a[x]数组相当于 二纬数组 18 } 19 } 20 while(m--) 21 { 22 scanf("%d%d",&x,&y); 23 if(!a.count(y) ||a[y].size()<x) printf("0\n"); 24 else printf("%d\n",a[y][x-1]); 25 } 26 return 0; 27 }