fork(1) download
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3.  
  4. long long int counter,counter1,sum[70000],input[70000]={0},input1[70000]={0}, head;
  5. void update(long long int x)
  6. {
  7. long long int times=head;long long int i;
  8. if(times==0)
  9. {
  10. sum[0]=x;head=1;return;
  11. }
  12. for(i=0;i<times;i++)
  13. {
  14. sum[head++]=sum[i]+x;
  15. }
  16. return ;
  17. }
  18. bool search(long long int x)
  19. { long long int i=0;counter1=0;
  20. while (i<head)
  21. {
  22. if(sum[i]==x)
  23. {
  24. counter1++;
  25. if(counter1==counter) return 1;}
  26. i++; }
  27. return 0;
  28. }
  29. int main()
  30. {
  31. long long int t,i,n,count;
  32. scanf("%lld",&t);
  33. while(t--)
  34. { for(i=0;i<70000;i++)
  35. {
  36. sum[i]=input[i]=input1[i]=0;
  37. }
  38. head=0;
  39. scanf("%lld",&n);
  40. long long int r=(long long)(pow(2,n));
  41. for(i=0;i<r;i++)
  42. scanf("%lld",input1+i);
  43. sort(input1,input1+r);
  44. counter=0;long long int printed=0;
  45. //now find and printf n elements;
  46. if(input1[1]!=0)
  47. {
  48. for(i=0;i<r;i++)
  49. input[i]=input1[i];
  50. }
  51. else
  52. {
  53. long long int zeromark=1;
  54. while(input1[zeromark]==0)
  55. {
  56. zeromark++;
  57. }zeromark--;
  58. for(i=0;i<log(zeromark+1);i++)
  59. {
  60. printf("0 ");printed++;
  61. if(printed==n)break;
  62. }
  63. long long int skipped=0;long long int index=0;
  64. long long skip=zeromark;
  65. for(i=zeromark+1;i<r;i++)
  66. {
  67. if(input1[i]!=input1[i-1])skipped=0;
  68. else if(skipped==skip)
  69. {
  70. input[index++]=input1[i];
  71. }
  72. else skipped++;
  73. }
  74. }
  75. for(i=1;i<r;i++)
  76. { if(printed==n) break;
  77. if(input[i]==input[i-1]) counter++;
  78. else counter=1;
  79. if(!search(input[i]))
  80. {
  81. printf("%lld ",input[i]);
  82. printed++;
  83. update(input[i]);
  84. }
  85. }
  86. printf("\n");
  87. }
  88. return 0;
  89. }
Success #stdin #stdout 0s 4944KB
stdin
1
3
0 0 1 1 1 1 2 2
stdout
0 1 0