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 }

 

posted @ 2014-09-06 09:52  future_hero  阅读(144)  评论(0编辑  收藏  举报