Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <vector>
- using namespace std;
- int N, nn;
- vector<vector<int>> ans;
- int calculate_or(vector<int> &a, int i)
- {
- nn++;
- if (i == N)
- return a[i];
- if (calculate_or(a, i + 1) == a[i])
- return a[i];
- return calculate_or(a, i + 1) | a[i];
- }
- void permute(vector<int> &a, int idx)
- {
- if (idx == a.size())
- {
- ans.push_back(a);
- return;
- }
- for (int i = idx; i < a.size(); i++)
- {
- swap(a[i], a[idx]);
- permute(a, idx + 1);
- swap(a[i], a[idx]);
- }
- }
- int main()
- {
- int t;
- cin >> t;
- while (t--)
- {
- cin >> N;
- int minn=3000;
- int op = 0,min_val_index=5;
- vector<int> a(N);
- for (int i = 0; i < N; i++)
- {
- cin >> a[i];
- }
- permute(a, 0);
- for (auto v : ans)
- {
- nn = 0;
- calculate_or(v, 0);
- // cout<<"nn minn "<<nn<<" "<<minn<<"\n";
- if (nn <= minn)
- {
- min_val_index = op;
- minn=nn;
- }
- op++;
- }
- cout<<minn<<endl;
- // cout<<" "<<min_val_index<<" "<<op<<endl<<endl;
- for (int i = 0; i < N; i++)
- {
- cout<<ans[min_val_index][i]<<" ";
- }
- }
- return 0;
- }
Add Comment
Please, Sign In to add comment