您的位置:首页 > 其它

uva 11991 Easy Problem from Rujia Liu?(map应用)

2014-10-15 22:35 381 查看
题意:求数字v出现第k次的位置

用一个map维护每个数出现了多少次,再用一个map<pair<int,int>,int >来维护每个数第k次出现的位置。具体看代码实现。

代码:

#include <iostream>
#include <cstdio>
#include <cstring>
#include <map>
using namespace std;
map <int,int>num;
map <pair<int ,int >,int > Hash;

int main(){
    int n,m;
    while(~scanf("%d%d",&n,&m)){
        Hash.clear();
        num.clear();
        for(int i=1;i<=n;i++){
            int tmp;
            scanf("%d",&tmp);
            if(num.find(tmp)==num.end()){
                num[tmp]=1;
            }
            else num[tmp]++;
            Hash[make_pair(tmp,num[tmp])]=i;
        }
        for(int i=1;i<=m;i++){
            int k,n;
            scanf("%d%d",&k,&n);
            if(num
<k) printf("0\n");
            else printf("%d\n",Hash[make_pair(n,k)]);
        }
    }
    return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: