zoukankan      html  css  js  c++  java
  • UVa 11991

    题意

    刘汝佳出的一道简单题? 一看出题人就知道肯定不简单233
    大概是就是输入一个数组 然后找几个下标
    比如4 2就是找到数组中第4个2所在下标, 找不到输出0

    思路

    蓝书上给的思路是真的很巧妙, 复杂度很小(题目时间1000ms)
    把输入组织成一个可以”直接读取结果”的数据结构
    构造一个 map< int,vector< int> >

    从查询的角度来看,把输入组织成一个可以“只读结果”的数据结构,例如data[v][k]就是答案。但由于v的范围比较大,这里的data不应是一个数组,而是一个STL的map,也就是说data[v]指map中键v对应的”值“,由于我们要以data[v][k]访问,那么data[v]的”值“应该是一个数组,保存整数v从左到右依次出现的下标(因此第k次出现的下标就是data[v][k])。另外,不同整数出现的次数可能相差很大,data[v]应是一个变长数组,如vector< int>

    AC代码

    #include <cstdio>
    #include <map>
    #include <vector>
    
    using namespace std;
    
    typedef vector<int> vec;
    map<int,vec> m;
    
    int main()
    {
        int T, n, i, x;
        int a, b;
        while( ~scanf("%d%d",&T,&n) ){
            if( !m.empty() )    m.clear();
            for( i = 1; i <= T; i++ ){
                scanf("%d",&x);
                if( !m.count(x) )
                    m[x] = vector<int>();
                m[x].push_back(i);
            }
            while(n--){
                scanf("%d%d",&a,&b);
                if( !m.count(b) || m[b].size() < a )
                    puts("0");
                else
                    printf("%d
    ",m[b][a-1]);
            }
        }
        return 0;
    }
  • 相关阅读:
    Valid Parentheses
    Remove Nth Node From End of List
    守护线程、守护进程
    4Sum
    Letter Combinations of a Phone Number
    3sum closest
    Excel Sheet Column Number
    Majority Element
    Balanced Binary Tree
    Maximum Depth of Binary Tree
  • 原文地址:https://www.cnblogs.com/JinxiSui/p/9740624.html
Copyright © 2011-2022 走看看