#python #python-3.x #python-2.7
#python #python-3.x #python-2.7
Вопрос:
Как определить перестановки списка и определить значение arriamp;arri 1 , где amp; — побитовые и(amp;)
предположим, у нас есть список [1,2,3], и нам нужно найти все перестановки этого списка, и тогда мы найдем, есть ли какая-либо перестановка, arri amp; arri 1 больше 0 или нет . если да, мы напечатаем только этот список.
Комментарии:
1. Я думаю, что этот вопрос, возможно, потребуется отредактировать для уточнения. Когда вы говорите array amp; array 1 > 0, применяете ли вы побитовое amp; к 3 значениям каждого массива? Каким будет желаемый результат для вашего примера, [1,2,3]?
2. @Doot да, применяя для трех значений. желаемый результат будет 1 3 2 может быть несколько выходов.
Ответ №1:
Если вы имеете в виду этот вопрос, то одним из возможных решений было бы использование обратного отслеживания. Я уверен, что есть более быстрый способ сделать это.
#include <bits/stdc .h>
using namespace std;
bool beautifulPermutations(vector<int> cur,set<int> used,int n){
if(cur.size() == n){
for(auto x:cur){
cout<<x<<" ";
}
cout<<endl;
return true;
}
for(int i=1;i<=n;i ){
if(used.find(i) == used.end()){
if(cur.size() == 0 || (((int)cur.back() amp; i) > 0)){
cur.push_back(i);
used.insert(i);
bool res = beautifulPermutations(cur,used,n);
if(res)
return true;
int x = cur.back();
cur.pop_back();
used.erase(x);
}
}
}
return false;
}
int main(){
int t;
cin>>t;
while(t-->0){
int n;
cin>>n;
vector<int> v;
set<int> s;
if(!beautifulPermutations(v,s,n))
cout<<-1<<endl;
}
}