题解:和前面的多校的一道题目类似,顺序遍历的时候,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; }