Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <fstream>
- using namespace std;
- ifstream in("biperm.in");
- ofstream out("biperm.out");
- int N;
- int *A, *B;
- long Solutii = 0;
- int Minimum;
- int *solA, *solB;
- int int_temp;
- bool bool_temp;
- int mutari = 0;
- void incepe(int pos)
- {
- if (pos < N)
- {
- int a = A[pos], b = B[pos];
- incepe(pos + 1);
- A[pos] = b;
- B[pos] = a;
- mutari++;
- incepe(pos + 1);
- A[pos] = a;
- B[pos] = b;
- mutari--;
- }
- else
- {
- for (int i = 0; i < N; i++)
- {
- bool_temp = false;
- int_temp = A[i];
- for (int j = 0; j < N; j++)
- if (int_temp == B[j])
- {
- bool_temp = true;
- break;
- }
- if (!bool_temp) return;
- }
- if (mutari < Minimum)
- Minimum = mutari;
- if (Solutii == 0)
- {
- for (int i = 0; i < N; i++)
- {
- solA[i] = A[i];
- solB[i] = B[i];
- }
- }
- Solutii++;
- }
- }
- int main()
- {
- in >> N;
- A = new int[N];
- B = new int[N];
- solA = new int[N];
- solB = new int[N];
- Minimum = N;
- for (int i = 0; i < N; i++)
- in >> A[i];
- for (int i = 0; i < N; i++)
- in >> B[i];
- incepe(0);
- out << Solutii << " " << Minimum << endl;
- for (int i = 0; i < N; i++)
- out << (i == 0 ? "" : " ") << solA[i];
- out << endl;
- for (int i = 0; i < N; i++)
- out << (i == 0 ? "" : " ") << solB[i];
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement