fork download
  1. #include <iostream>
  2. #include <vector>
  3. #include <algorithm>
  4.  
  5. using namespace std;
  6.  
  7. vector<int> solve(vector<int>& A) {
  8. int n = A.size();
  9. vector<int> perm(n);
  10. for (int i = 0; i < n; i++) perm[i] = i;
  11.  
  12. vector<int> max_power(20, 0);
  13.  
  14. do {
  15. vector<int> Z(n);
  16. for (int i = 0; i < n; i++) Z[i] = A[perm[i]];
  17.  
  18. vector<int> power(20, 0);
  19. for (int i = 0; i < 20; i++) {
  20. int mask = 1 << (19 - i);
  21. int max_j = 0;
  22. for (int j = 0; j < n; j++) {
  23. bool all_set = true;
  24. for (int k = 0; k <= j; k++) {
  25. if ((Z[k] & mask) == 0) {
  26. all_set = false;
  27. break;
  28. }
  29. }
  30. if (all_set) max_j = j + 1;
  31. else break;
  32. }
  33. power[i] = max_j;
  34. }
  35.  
  36. // Check if current power array is greater
  37. bool greater = false;
  38. for (int i = 0; i < 20; i++) {
  39. if (power[i] > max_power[i]) {
  40. greater = true;
  41. break;
  42. } else if (power[i] < max_power[i]) break;
  43. }
  44. if (greater) max_power = power;
  45.  
  46. } while (next_permutation(perm.begin(), perm.end()));
  47.  
  48. return max_power;
  49. }
  50.  
  51. int main() {
  52. // Test case 1: A = [1, 2, 3, 4, 5]
  53. vector<int> A1 = {1, 2, 3, 4, 5};
  54. vector<int> result1 = solve(A1);
  55. cout << "Test 1: ";
  56. for (int x : result1) cout << x;
  57. cout << endl;
  58.  
  59. // Test case 2: A = [4, 16, 16, 36, 36]
  60. vector<int> A2 = {4, 16, 16, 36, 36};
  61. vector<int> result2 = solve(A2);
  62. cout << "Test 2: ";
  63. for (int x : result2) cout << x;
  64. cout << endl;
  65.  
  66. // Test case 3: A = [5, 5, 3, 2, 1, 1]
  67. vector<int> A3 = {5, 5, 3, 2, 1, 1};
  68. vector<int> result3 = solve(A3);
  69. cout << "Test 3: ";
  70. for (int x : result3) cout << x;
  71. cout << endl;
  72.  
  73. return 0;
  74. }
  75.  
Success #stdin #stdout 0.01s 5320KB
stdin
Standard input is empty
stdout
Test 1: 00000000000000000201
Test 2: 00000000000000200300
Test 3: 00000000000000000205