题目链接:https://ac.nowcoder.com/acm/contest/7023/A
分析
简单哈希即可,细节处理在于为了防止哈希冲突,需要用较大的素数,这里选择了第二大素数2147483587
代码
#include <bits/stdc++.h>
using namespace std;
const int MAXN = 1e5 + 10;
const int M = 2147483587;
int a[MAXN], b[MAXN];
int quick_pow(int n, int k) {
int ans = 1;
while (k) {
if (k & 1) ans = 1LL * ans * n % M;
n = 1LL * n * n % M;
k >>= 1;
}
return ans;
}
int main() {
int t, n, m, k;
cin >> t;
while (t--) {
cin >> n >> m;
for (int i = 1; i <= n; i++)
cin >> a[i];
for (int i = 1; i <= m; i++)
cin >> b[i];
sort(a + 1, a + 1 + n);
sort(b + 1, b + 1 + m);
int ha = 1, hb = 1;
k = 1;
for (int i = 1; i <= a[n]; i++) {
while (i > a[k]) k++;
ha = 1LL * ha * quick_pow(i, n - k + 1) % MOD;
}
k = 1;
for (int i = 1; i <= b[m]; i++) {
while (i > b[k]) k++;
hb = 1LL * hb * quick_pow(i, m - k + 1) % MOD;
}
if (ha == hb) cout << "equal";
else cout << "unequal";
}
return 0;
}
有收获?希望老铁们来个三连击,给更多的人看到这篇文章
1、给俺点个赞呗,可以让更多的人看到这篇文章,顺便激励下我,嘻嘻。
2、老铁们,关注我的原创微信公众号「Grand Theft Algorithm」,专注于写算法题解 + 计算机基础知识