1 solutions
-
0
首先我们我们可以做一个桶排序,计算每个数出现的次数
然后我们枚举 , 我们想知道有多少对 满足 , 那么显然满足条件的
这样去枚举 类似与素数筛法去找。这样满足要求的一对 对答案的贡献就是
特别注意当 的情况,避免重复计数。
#include <bits/stdc++.h> using namespace std; #define int long long const int mod = 998244353; const int N = 1e6 + 10, Max = 1e6; int cnt[N]; int n, k; signed main() { cin >> n >> k; for (int i = 1; i <= n; i++) { int x; cin >> x; cnt[x]++; } int ans = 0; for (int i = k + 1; i <= Max; i++) { for (int j = 0; i * j + k <= Max; j++) { if (i != i * j + k) ans += cnt[i] * cnt[i * j + k] % mod; else ans += cnt[i] * (cnt[i] - 1) / 2; ans %= mod; } } cout << ans << endl; return 0; }
- 1
Information
- ID
- 616
- Time
- 1000ms
- Memory
- 256MiB
- Difficulty
- 10
- Tags
- (None)
- # Submissions
- 75
- Accepted
- 1
- Uploaded By