Pagini recente » Cod sursa (job #656267) | Cod sursa (job #379609) | Cod sursa (job #1701312) | Cod sursa (job #1434600) | Cod sursa (job #1897301)
#include <iostream>
#include <fstream>
using namespace std;
int biperm[2][10002];
bool marcat[10001];
int poz[2][10002];
int lCiclu;
int nrMut;
int minim (int a, int b) {
if (a < b) {
return a;
}
return b;
}
void explore (int col) {
if (marcat[biperm[0][col]]) {
return;
}
lCiclu++;
marcat[biperm[0][col]] = 1;
if (biperm[1][poz[1][biperm[0][col]]] == biperm[1][col]) {
int temp = biperm[1][poz[1][biperm[0][col]]];
biperm[1][poz[1][biperm[1][col]]] = biperm[0][poz[1][biperm[1][col]]];
biperm[0][poz[1][biperm[1][col]]] = temp;
nrMut++;
}
explore (poz[0][biperm[1][col]]);
}
int main() {
ifstream file_in ("biperm.in");
ofstream file_out ("biperm.out");
int n;
int i, j;
int sola = 1, solb = 0;
file_in >> n;
for (i = 0; i < 2; i++) {
for (j = 1; j <= n; j++) {
file_in >> biperm[i][j];
if (!poz[0][biperm[i][j]]) {
poz[0][biperm[i][j]] = j;
} else {
poz[1][biperm[i][j]] = j;
}
}
}
for (i = 1; i <= n; i++) {
if (!marcat[i]) {
nrMut = 0;
lCiclu = 0;
explore(i);
solb += minim (nrMut, lCiclu - nrMut);
sola *= 2;
}
}
file_out << sola << " " << solb << "\n";
for (i = 0; i < 2; i++) {
for (j = 1; j <= n; j++) {
file_out << biperm[i][j] << " ";
}
file_out << "\n";
}
return 0;
}