专栏文章

题解:P12198 Hash Killer II

P12198题解参与者 2已保存评论 1

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
1 条
当前快照
1 份
快照标识符
@mipl2wg7
此快照首次捕获于
2025/12/03 13:45
3 个月前
此快照最后确认于
2025/12/03 13:45
3 个月前
查看原文

Analysis

单模哈希实际上是非常好卡的。
由生日悖论可知,对于一个模数为 pp 的哈希,取 p\sqrt{p} 次就大概率会发生哈希冲突。于是我们只需要胡乱输出随机字符就可以卡掉它。109+731629.78\sqrt{10^9+7}\approx 31629.78,为了保险我们直接取 10510^5 次即可稳定通过。

Code

CPP
#include <bits/stdc++.h>
using namespace std;

#define endl '\n'
#define int long long

signed main()
{
    ios::sync_with_stdio(false);
    cin.tie(0), cout.tie(0);
    mt19937 RAND(time(0));
    int n = 100'000, l = 100;
    cout << n << " " << l << endl;
    for (int i = 1; i <= n; i++)
        cout << char(RAND() % 26 + 'a');
    cout << endl;
    return 0;
}

评论

1 条评论,欢迎与作者交流。

正在加载评论...