标签:ack clu 比较 ret 数据 int scanf push 解决
https://vjudge.net/problem/UVA-11991
题意:
给出n个数字,以及m个询问,每次问v的第k次出现的下标,如果不存在则输出0。
思路:
如果数据范围比较小,那么二维数组date[v][k]应该可以解决这个问题,但是数据比较大,兰儿我们可以这样造数据结构,用map和vector就可以做到。
第一次知道有map<int,vector<int> > 这种操作orz!
代码:
1 #include <stdio.h> 2 #include <map> 3 #include <vector> 4 using namespace std; 5 6 map<int,vector<int> > a; 7 8 int main() 9 { 10 int n,m; 11 12 while (scanf("%d%d",&n,&m) != EOF) 13 { 14 a.clear(); 15 16 for (int i = 0;i < n;i++) 17 { 18 int x; 19 20 scanf("%d",&x); 21 22 if (a.count(x)) a[x].push_back(i+1); 23 else 24 { 25 a[x] = vector<int> (); 26 27 a[x].push_back(i+1); 28 } 29 } 30 31 for (int i = 0;i < m;i++) 32 { 33 int k,v; 34 35 scanf("%d%d",&k,&v); 36 37 if (!a.count(v) || a[v].size() < k) printf("%d\n",0); 38 else printf("%d\n",a[v][k-1]); 39 } 40 } 41 42 return 0; 43 }
uva 11991 Easy Problem from Rujia Liu?
标签:ack clu 比较 ret 数据 int scanf push 解决
原文地址:http://www.cnblogs.com/kickit/p/7642927.html