fork download
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3.  
  4. long long int a[33000],b[33000],c[33000];
  5.  
  6. int pow(int i,int j)
  7. {
  8. int res=1;
  9. for(i=0;i<j;i++)
  10. {
  11. res=res*2;
  12. }
  13. return res;
  14. }
  15.  
  16. void makereallyone(int sum,int m)
  17. {
  18. int i;
  19. for(i=0;i<m;i++)
  20. {
  21. if(a[i]==sum)
  22. {
  23. c[i]=1;
  24. break;
  25. }
  26. }
  27. }
  28.  
  29. void makeone(int i,int m)
  30. {
  31. int j,sum=0;
  32. for(j=1;j<i;j++)
  33. {
  34. sum=a[j]+a[i];
  35. makereallyone(sum,m);
  36. }
  37. }
  38.  
  39. int main()
  40. {
  41. int t;
  42. scanf("%d",&t);
  43. do
  44. {
  45. int n,m,i,j;
  46. scanf("%d",&n);
  47. m=pow(2,n);
  48. for(i=0;i<m;i++)
  49. {
  50. scanf("%lld",&a[i]);
  51. }
  52. if(n==1)
  53. {
  54. sort(a,a+m);
  55. printf("%lld\n",a[1]);
  56. }
  57. else
  58. {
  59. sort(a,a+m);
  60. for(i=0;i<m;i++)
  61. {
  62. c[i]=0;
  63. }
  64. b[0]=a[0];
  65. c[0]=1;
  66. b[1]=a[1];
  67. c[1]=1;
  68. i=2;
  69. j=2;
  70. do
  71. {
  72. if(c[i]!=1)
  73. {
  74. b[j]=a[i];
  75. c[i]=1;
  76. makeone(i,m);
  77. j++;
  78. i++;
  79. }
  80. else
  81. {
  82. i++;
  83. }
  84. }while(j!=n+1);
  85. for(i=1;i<j;i++)
  86. {
  87. printf("%lld ",b[i]);
  88. }
  89. printf("\n");
  90. }
  91. t--;
  92. }while(t!=0);
  93. return 0;
  94. }
  95.  
Success #stdin #stdout 0s 4076KB
stdin
1
3
0 0 1 1 1 1 2 2 
stdout
0 1 1