本文共 818 字,大约阅读时间需要 2 分钟。
这道题的暴力破解其实非常简单,但我们选择使用哈希表来实现,这样可以更高效地解决问题。
首先,我们需要包含必要的头文件:
#include#include #include #include using namespace std;
接下来,我们定义了一些常量和变量:
#define P 4000037long long a[P], b[200010], c[P];long long n, C, x, qm, ans;
然后,我们定义了两个关键函数:
long long hash(long long x) { return x % P;}long long dw(long long x) { long long j = 0; qm = hash(abs(x)); while (a[hash(j + qm)] != x && c[hash(j + qm)] != 0) { j++; } return hash(j + qm);} 最后是主函数的逻辑:
int main() { scanf("%lld%lld", &n, &C); for (int i = 1; i <= n; i++) { scanf("%lld", &b[i]); a[dw(b[i])] = b[i]; c[dw(b[i])]++; } for (int i = 1; i <= n; i++) { ans += c[dw(b[i] - C) % P]; } cout << ans << endl;} 通过这种方式,我们可以高效地完成题目的要求。
转载地址:http://gsle.baihongyu.com/