Pagini recente » Cod sursa (job #2557780) | Cod sursa (job #1324263) | Cod sursa (job #3280038) | Cod sursa (job #2266865) | Cod sursa (job #2272609)
#include <bits/stdc++.h>
using namespace std;
short elem[3][10005],vecin[3][10005];
vector<pair<int,int> >nod[10005],where[10005];
bitset<10005>ap,viz[3];
int n,val,counter;
void go_visit(int i,int j)
{
int pos=elem[i][j];
if(pos==val)
return;
if(viz[nod[pos][0].first][nod[pos][0].second])
go_visit(nod[pos][1].first,nod[pos][1].second);
else
go_visit(nod[pos][0].first,nod[pos][0].second);
}
int main()
{
ifstream fin("biperm.in");
ofstream fout("biperm.out");
fin>>n;
for(int i=1;i<=2;i++) for(int j=1;j<=n;j++) fin>>elem[i][j] , where[elem[i][j]].push_back({i,j});
for(int i=1;i<=n;i++)
{
if(elem[1][i]==elem[2][i]) continue;
nod[elem[1][i]].push_back({2,i});
nod[elem[2][i]].push_back({1,i});
}
counter=1;
for(int i=1;i<=2;i++)
for(int j=1;j<=n;j++)
{
if(viz[i][j] || nod[elem[i][j]].empty()) continue;
viz[i][j]=1;
val=elem[i][j];
go_visit(2-i+1,j);
counter*=2;
}
fout<<counter<<" ";
return 0;
}