zoukankan      html  css  js  c++  java
  • CC ANUMLA(STL的运用)

    题目连接:http://www.codechef.com/problems/ANUMLA

    题意:给一个序列所有子集和(2^n个子集),复原这个序列。。。

    如:0 1 1 2 2 3 3 4 原序列为1 1 2

    分析:每次找出最小的那个元素,再删除掉可能由该元素相加得到的元素,如上面那个例子,将所有可能相加得到其他元素存在一个数组add中,0是空集,先去掉,剩下第一个元素1必定是原序列最小元素,取出答案数组ans中,一步步下去。

    1.取出1放进ans数组中,ans数组:1   相加辅助数组add:1,删除1后原序列:1 2 2 3 3 4

    2.取出最小元素1放进ans数组,ans数组1 1   相加辅助数组add:1 1 2(1+1,1),删除1,2后序列:2 3 3 4

    3.取出最小元素2放进ans数组,ans数组1 1 2   相加辅助数组add:1 1 2 2 3 3 4(1+2,1+2,2+2,2),删除2,3,3,4后原序列已空。

    同样序列0 2 5 7 10 12 15 17去掉0,原序列为 2 5 7 10 12 15 17

    1.取出1放进ans数组中,ans数组:2   相加辅助数组add:2,删除2后原序列: 5 7 10 12 15 17

    2.取出最小元素5放进ans数组,ans数组2 5   相加辅助数组add:2,5,7(2+5,5),删除5,7后序列:10 12 15 17

    3.取出最小元素10放进ans数组,ans数组2 5 10   相加辅助数组add:2 5 7 10 12 15 17(10+2,10+5,10+7,10),删除2,3,3,4后原序列已空。

    这题用STL中的multiset处理起来太方便了。

    #include<bits/stdc++.h>
    using namespace std;
    multiset<int>Set;
    vector<int>ans,add;
    int main()
    {
        int T,n,x;
        scanf("%d",&T);
        while(T--)
        {
            scanf("%d",&n);
            Set.clear();ans.clear();add.clear();
            for(int i=0;i<(1<<n);i++)
            {
                scanf("%d",&x);
                Set.insert(x);
            }
            Set.erase(0);
            x=n;
            while(x--)
            {
                int mn=*(Set.begin());//取出最小元素放进ans数组
                ans.push_back(mn);
                for(int i=0,sz=add.size();i<sz;i++)
                {
                    int ad=add[i]+mn;add.push_back(ad);
                    Set.erase(Set.find(ad));//删除由各个元素相加得到的子集
                }
                add.push_back(mn);
                Set.erase(Set.find(mn));
            }
            for(int i=0,sz=ans.size();i<sz;i++)printf("%d%c",ans[i],(i==n-1)?'
    ':' ');
        }
    }
    View Code
  • 相关阅读:
    Wordpress 所有hoor列表
    Redis的PHP操作手册(转)
    thinkphp pathinfo nginx 无法加载模块:Index
    gitlab 创建SSH Keys 报500错
    在docker 中配置hadoop1.2.1 cluser
    docker 配置文件引发的问题
    shell在一个大文件找出想要的一段字符串操作技巧
    php关于金额比较引发的问题(转)
    mac 终端乱码
    Swoole笔记(二)
  • 原文地址:https://www.cnblogs.com/lienus/p/4254789.html
Copyright © 2011-2022 走看看