https://vjudge.net/problem/HDU-6168
题意:
如果我们现在有一个数组A【1····n】,那么我们每一次拿出两个数A【i】和A【j】(1≤i
int ans[N];
int a[N];
int vis[N];
map<int,int>mp;
int main(){
int n;
while(~sf("%d",&n)){
mem(vis,0);
rep(i,1,n){sf("%d",&a[i]);}
sort(a+1,a+1+n);
int cnt=0;
for(int i=1;i<=n;++i){
if(mp[a[i]]){
mp[a[i]]--;
}
else{
for(int j=1;j<=cnt;++j){
mp[ans[j]+a[i]]++;
}
ans[++cnt]=a[i];
}
}
pf("%d\n",cnt);
for(int i=1;i<=cnt;++i){
pf("%d%c",ans[i],i==cnt?'\n':' ');
}
}
}