牛客等级之题N1(8.12场)小w的a=b问题

题目链接: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」,专注于写算法题解 + 计算机基础知识

猜你喜欢

转载自blog.csdn.net/weixin_42396397/article/details/107965510