hdu 6168 Numbers

题解:和前面的多校的一道题目类似,顺序遍历的时候,a元素是比b要小的。用求出来的a去筛一遍b就可以了。

#include <iostream>
#include <vector>
#include <map>
#include <cstdio>
using namespace std;
vector<int>ans;
int c[130000];
int main()
{
    int m;
    while(~scanf("%d",&m))
    {
        map<int,int>mp;
        ans.clear();
        for(int i=1;i<=m;i++)
        {
            scanf("%d",&c[i]);
            mp[c[i]]++;
        }
        for(int i=1;i<=m;i++)
        {
            while(mp[c[i]])
            {
                for(int j=0;j<ans.size();j++)
                {
                    mp[c[i]+ans[j]]--;
                }
                ans.push_back(c[i]);
                mp[c[i]]--;
            }
        }
        cout<<ans.size()<<endl;
        cout<<ans[0];
        for(int i=1;i<ans.size();i++) cout<<' '<<ans[i];
        cout<<endl;
    }
    return 0;
}

 

posted @ 2017-08-23 08:36  猪突猛进!!!  阅读(102)  评论(0编辑  收藏  举报