题目链接:HDU6168
签到题,比较好想,官方题解说的很清楚。
AC代码:
/*
2017年8月22日20:37:31
HDU6168
AC
签到
*/
#include <iostream>
#include <map>
#include <set>
#include <string>
#include <cstring>
#include <cstdio>
#include <algorithm>
#include <cmath>
#include <queue>
#include <vector>
using namespace std;
multiset<int> ms,res;
multiset<int>::iterator it,itr,del;
int main(){
int m;
while(~scanf("%d",&m)){
ms.clear();
res.clear();
for(int i=1;i<=m;i++){
int c;
scanf("%d",&c);
ms.insert(c);
}
res.insert(*(ms.begin()));
it=ms.begin();
ms.erase(it);
for(it=ms.begin();it!=ms.end();++it){
int val=*it;
for(itr=res.begin();itr!=res.end();itr++){
int val2=*itr;
del=ms.find(val+val2);
if(del!=ms.end()) ms.erase(del);
}
res.insert(*it);
}
printf("%d\n",(int)(sqrt(1+8*m)-1)/2);
for(itr=res.begin();itr!=res.end();itr++) {
if(itr!=res.begin()) printf(" ");
printf("%d",*itr);
//printf(" ");
//else printf("\n");
}
//getchar();
printf("\n");
}
return 0;
}