美文网首页
map+vector UVa 11991

map+vector UVa 11991

作者: laochonger | 来源:发表于2018-05-05 10:51 被阅读0次

    题意:找到数组中第x个y的下标
    分析:这题有很多做法,下面给出一种效率比较高的方法,即用map与vector创建一个二维都不定长且一维不定索引的二维数组,这样做方便查找但不方便进行迭代遍历
    map<int , vector<int> >a;
    if(!a.count(x)) a[x] = vector<int>(); // 如果x未出现过,则创建一个以x为第一维索引的不定长数组,即要查找的数为第一维,第几个为第二维
    if(!a.count(y)||a[y].size()<x) printf("0\n");//第一维没有索引y或者没有x个y
    a[x].push_back(i+1); // 不定长数组中储存着下标
    printf("%d\n", a[y][x-1]);

    #include<cstdio>
    #include<vector>
    #include<map>
    using namespace std;
    
    map<int , vector<int> >a;// > > 要用空格分开
    
    int main(){
        int n,m, x,y;
        while(scanf("%d %d", &n, &m) == 2){
            a.clear();
            for(int i = 0; i < n; i++){
                scanf("%d", &x);
                if(!a.count(x)) a[x] = vector<int>(); // 如果x未出现过,则创建一个以x为第一维索引的不定长数组,即要查找的数为第一维,第几个为第二维 
                a[x].push_back(i+1); // 不定长数组中储存着下标 
            }
            while(m--){
                scanf("%d%d", &x,&y);
                if(!a.count(y)||a[y].size()<x) printf("0\n");//第一维没有索引y或者没有x个y 
                else printf("%d\n", a[y][x-1]); 
            } 
            
        }
        return 0;
    } 
    

    相关文章

      网友评论

          本文标题:map+vector UVa 11991

          本文链接:https://www.haomeiwen.com/subject/xxysrftx.html