Hitesh_jadhav

5 - Calculate OR

Jun 9th, 2021 (edited)
76
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.35 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3. using namespace std;
  4. int N, nn;
  5. vector<vector<int>> ans;
  6. int calculate_or(vector<int> &a, int i)
  7. {
  8. nn++;
  9. if (i == N)
  10. return a[i];
  11. if (calculate_or(a, i + 1) == a[i])
  12. return a[i];
  13. return calculate_or(a, i + 1) | a[i];
  14. }
  15. void permute(vector<int> &a, int idx)
  16. {
  17. if (idx == a.size())
  18. {
  19. ans.push_back(a);
  20. return;
  21. }
  22. for (int i = idx; i < a.size(); i++)
  23. {
  24. swap(a[i], a[idx]);
  25. permute(a, idx + 1);
  26. swap(a[i], a[idx]);
  27. }
  28. }
  29. int main()
  30. {
  31. int t;
  32. cin >> t;
  33. while (t--)
  34. {
  35. cin >> N;
  36. int minn=3000;
  37. int op = 0,min_val_index=5;
  38. vector<int> a(N);
  39. for (int i = 0; i < N; i++)
  40. {
  41. cin >> a[i];
  42. }
  43. permute(a, 0);
  44. for (auto v : ans)
  45. {
  46. nn = 0;
  47. calculate_or(v, 0);
  48. // cout<<"nn minn "<<nn<<" "<<minn<<"\n";
  49. if (nn <= minn)
  50. {
  51. min_val_index = op;
  52. minn=nn;
  53. }
  54. op++;
  55. }
  56. cout<<minn<<endl;
  57. // cout<<" "<<min_val_index<<" "<<op<<endl<<endl;
  58. for (int i = 0; i < N; i++)
  59. {
  60. cout<<ans[min_val_index][i]<<" ";
  61. }
  62. }
  63. return 0;
  64. }
Add Comment
Please, Sign In to add comment