题解:CF1188B Count Pairs

题意:很简单了,不再赘述。

做法:

有一个很经典的问题,化简 \(\prod\limits_{i=2^k} ^{k\le x}(a^i + b^i)\)

这个可以直接乘上一个 \(a-b\),然后得到 \(a^{2^{x+1}}-a^{2^{x+1}}\)

那么对于这个题,我们两侧直接乘上 \(a_i-a_j\),得到 \(a_i^4-a_j^4\equiv k\times (a_i-a_j)\pmod{p}\),将 \(a_i,a_j\) 分离,用 map 统计贡献即可。

bonus:如果没有互不相同怎么做。

代码:

#include <bits/stdc++.h>
using namespace std;
#define int long long
const int maxn = 3e5 + 5;
int n, p, k, a[maxn], ans;
map<int, int> mp;
signed main() {
	cin >> n >> p >> k;
	for (int i = 1; i <= n; i++)
		cin >> a[i], a[i] = a[i] * a[i] % p * a[i] % p * a[i] % p - k * a[i] % p;
	for (int i = 1; i <= n; i++)
		a[i] = (a[i] % p + p) % p;
	for (int i = 1; i <= n; i++)
		ans += mp[a[i]], mp[a[i]]++;
	cout << ans << endl;
	return 0;
}
posted @ 2025-07-25 18:39  LUlululu1616  阅读(16)  评论(0)    收藏  举报