刷题——hdu 6168 Numbers
2017-08-22 19:45
393 查看
/*
将ab数组放入map中记录,将ab数组排序
ab[0],ab[1]一定是a1,a2(毫无疑问的)
接下去不知道是a1+a2,还是a3,在map中将a1+a2去掉1
ab序列在map中查找,头一个数若个数不为0就是a3(a1,a2,a1+a2)已去掉1
同理将a1+a3,a2+a3去掉后头一个个数不为0的数就是a3
依次操作,就求出a数组
*/
#include <stdio.h>
#include <algorithm>
#include <math.h>
#include <map>
using namespace std;
int ab[125300];
int a[125300];
int n,m,l;
int main(){
while(~scanf("%d",&m)){
n=(int)sqrt(m*2*1.0);
map<int,int>s;
for(int i=0;i<m;i++){
scanf("%d",&ab[i]);
s[ab[i]]++;
}
sort(ab,ab+m);//不排序也A了
l=0;
for(int i=0;i<m;i++){
if(s[ab[i]]>0){
for(int j=0;j<l;j++){
s[ab[i]+a[j]]--;
}
a[l++]=ab[i];
s[ab[i]]--;
if(l==n)break;
}
}
printf("%d\n",n);
for(int i=0;i<n;i++){
if(i)printf(" ");
printf("%d",a[i]);
}
printf("\n");
}
return 0;
}
将ab数组放入map中记录,将ab数组排序
ab[0],ab[1]一定是a1,a2(毫无疑问的)
接下去不知道是a1+a2,还是a3,在map中将a1+a2去掉1
ab序列在map中查找,头一个数若个数不为0就是a3(a1,a2,a1+a2)已去掉1
同理将a1+a3,a2+a3去掉后头一个个数不为0的数就是a3
依次操作,就求出a数组
*/
#include <stdio.h>
#include <algorithm>
#include <math.h>
#include <map>
using namespace std;
int ab[125300];
int a[125300];
int n,m,l;
int main(){
while(~scanf("%d",&m)){
n=(int)sqrt(m*2*1.0);
map<int,int>s;
for(int i=0;i<m;i++){
scanf("%d",&ab[i]);
s[ab[i]]++;
}
sort(ab,ab+m);//不排序也A了
l=0;
for(int i=0;i<m;i++){
if(s[ab[i]]>0){
for(int j=0;j<l;j++){
s[ab[i]+a[j]]--;
}
a[l++]=ab[i];
s[ab[i]]--;
if(l==n)break;
}
}
printf("%d\n",n);
for(int i=0;i<n;i++){
if(i)printf(" ");
printf("%d",a[i]);
}
printf("\n");
}
return 0;
}
相关文章推荐
- HDU 6168 Numbers(multiset)
- hdu 6168 Numbers【map】
- HDU 6168 - Numbers 水题 2017 Multi-University Training Contest - Team 9
- HDU 6168 Numbers
- 2017 多校训练第九场 HDU 6168 Numbers 贪心枚举
- HDU 6168 Numbers【水题】
- HDU 6168 - Numbers 水题 2017 Multi-University Training Contest - Team 9
- hdu 6168 Numbers
- HDU 6168 Numbers
- HDU 6168-Numbers
- HDU 6168 Numbers
- HDU 6168 Numbers
- HDU 6168 Numbers(规律)
- Hdu 6168 Numbers【思维+暴力】
- hdu 6168 Numbers (STL)
- HDU 6168 Numbers(排序)
- HDU 6168 - Numbers | 2017 ZJUT Multi-University Training 9
- hdu--6168--Numbers
- HDU 6168 Numbers
- hdu-6168 Numbers