Description
给出两个长度为
n
的点对
Input
第一行一整数
Output
输出方案数,结果模 m
Sample Input
1
1
2
7
Sample Output
1
Solution
假设
Code
#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<vector>
#include<queue>
#include<map>
#include<set>
#include<ctime>
using namespace std;
typedef long long ll;
typedef pair<int,int>P;
const int INF=0x3f3f3f3f,maxn=100001;
map<int,int>M,vis;
map<int,int>::iterator it;
int n,a[maxn],b[maxn],m;
int main()
{
while(~scanf("%d",&n))
{
M.clear();
for(int i=1;i<=n;i++)scanf("%d",&a[i]),M[a[i]]++;
for(int i=1;i<=n;i++)scanf("%d",&b[i]),M[b[i]]++;
scanf("%d",&m);
int num=0;
for(int i=1;i<=n;i++)if(a[i]==b[i])num++;
int ans=1;
for(it=M.begin();it!=M.end();it++)
{
for(int i=2;i<=it->second;i++)
{
int j=i;
while(num&&j%2==0)num--,j/=2;
ans=(ll)ans*j%m;
}
}
printf("%d\n",ans);
}
return 0;
}