c++stl之map+set oj题目练习

nefu 1684 第K小整数 (set)

#include 

using namespace std;
set<int>a;//set中每个元素都是独特的,且排好序的
int main()
{
    int n,k,x;
    cin>>n>>k;
    for(int i=0;i<n;i++){cin>>x;a.insert(x);}
    set<int>::iterator it;//迭代器,类似于数组下标
    int flag,cnt;
    flag=cnt=0;
    for(it=a.begin();it!=a.end();it++)//end()指向的是最后一个元素的下一个不存在的元素
    {
        cnt++;
        if(cnt==k){printf("%d\n",*it);flag=1;break;}
    }
    if(flag==0)cout<<"NO RESULT"<<endl;
    return 0;
}

nefu 743 明明的随机数 (set)

#include 

using namespace std;
set<int>a;//set中每个元素都是独特的,且排好序的
int main()
{
    set<int>::iterator it;
    int n,x;
    while(cin>>n)
    {
        a.clear();//不要忘记清空 set容器!!
        while(n--){cin>>x;a.insert(x);}
        cout<<a.size()<<endl;
        for(it=a.begin();it!=a.end();it++)
        {
            if(it==a.begin())cout<<*it;
            else cout<<" "<<*it;
        }
        cout<<endl;
    }
    return 0;
}

nefu 1686 眼红的Medusa (map)

#include 
using namespace std;
map<int,int>b;
int a[100005];
int main()
{
    int n,m,x,flag;
    cin>>n>>m;
    for(int i=1;i<=n;i++){cin>>x;a[i]=x;}//i为顺序,值为编号
    for(int i=1;i<=m;i++)
    {
        cin>>x;
        b[x]=1;
    }
    for(int i=n;i>=1;i--)
    {
        if(b[a[i]]){flag=i;break;}
    }
    for(int i=1;i<flag;i++)
    {
        if(b[a[i]])cout<<a[i]<<" ";
    }
    cout<<a[flag];
    return 0;
}

nefu 1687 保龄球 (map)

这个题数组开不了2e9这么大,所以要用别的容器做

#include 
using namespace std;
map<int,int>a;
map<int,int>::iterator it;
int main()
{
    int n,q,x;
    scanf("%d",&n);
    for(int i=1;i<=n;i++){scanf("%d",&x);a[x]=i;}
    scanf("%d",&q);
    for(int i=0;i<q;i++)
    {
        int m;
        scanf("%d",&m);
        int flag=0;
        it=a.find(m);
        if(it != a.end())
        cout<<it->second<<endl;//记住了
        else    printf("0\n");
    }
    return 0;
}

你可能感兴趣的:(c++stl之map+set oj题目练习)