牛客练习赛48 B、小w的a=b问题
theme:给你两个数组,一个a[]数组,长度为n,另一个是b[]数组,长度为m。
现在问你,∏为连乘。t组样例1⩽T⩽2∗10^2),0⩽n,m,a[i],b[i]⩽10^5)
solution:利用哈希,直接计算阶乘的乘积,判断结果是否相等。注意选素数1e9+7可能被卡,这里用的1e9+9过了,最好是选多个模系,即选两个或更多不同的p值计算结果,取交。
#include<bits/stdc++.h>
using namespace std;
#define far(i,t,n) for(int i=t;i<n;++i)
typedef long long ll;
typedef unsigned long long ull;
using namespace std;
int a[100010],b[100010];
ull frac[100010];
int p=1e9+9;
void getFrac()
{
frac[0]=1;
for(int i=1;i<=100001;++i)
frac[i]=i*frac[i-1]%p;
}
int main()
{
int t;
cin>>t;
getFrac();
while(t--)
{
int n,m;
scanf("%d%d",&n,&m);
far(i,0,n)
scanf("%d",&a[i]);
far(i,0,m)
scanf("%d",&b[i]);
ull ans1=1;
far(i,0,n)
ans1=ans1*frac[a[i]]%p;
ull ans2=1;
far(i,0,m)
ans2=ans2*frac[b[i]]%p;
if(ans1==ans2)
printf("equal\n");
else
printf("unequal\n");
}
}