Codeforces 1189E. Count Pairs

Posted lltyyc

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Codeforces 1189E. Count Pairs相关的知识,希望对你有一定的参考价值。

传送门

可以算是纯数学题了吧...

看到这个 $(x+y)(x^2+y^2)$ 就可以想到化简三角函数时经常用到的操作,左右同乘

那么 $(a_i+a_j)(a_i^2+a_j^2) equiv  k mod P$ 其实相当于 $(a_i+a_j)(a_i-a_j)(a_i^2+a_j^2) equiv  k(a_i-a_j) mod P$

$(a_i^2-a_j^2)(a_i^2+a_j^2)equiv k(a_i-a_j) mod P$

$(a_i^4-a_j^4)equiv ka_i-ka_j mod P$

$a_i^4-ka_iequiv a_j^4-ka_j mod P$

所以就做完了

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<map>
using namespace std;
typedef long long ll;
inline int read()
{
    int x=0,f=1; char ch=getchar();
    while(ch<0||ch>9) { if(ch==-) f=-1; ch=getchar(); }
    while(ch>=0&&ch<=9) { x=(x<<1)+(x<<3)+(ch^48); ch=getchar(); }
    return x*f;
}
const int N=3e5+7;
int n,P,K;
map <int,int> cnt;
ll ans;
int main()
{
    n=read(),P=read(),K=read();
    for(int i=1;i<=n;i++)
    {
        int x=read();
        x=(1ll*x*x%P*x%P*x%P-1ll*x*K%P+P)%P;
        ans+=cnt[x]; cnt[x]++;
    }
    printf("%lld
",ans);
    return 0;
}

 

以上是关于Codeforces 1189E. Count Pairs的主要内容,如果未能解决你的问题,请参考以下文章

Codeforces 1189D2. Add on a Tree: Revolution

Codeforces 1327 E. Count The Blocks

2019年8月做题记录

Codeforces739E. Gosha is hunting

LeetCode 1189 “气球”的最大数量[map] HERODING的LeetCode之路

Codeforces123E. Maze树形dp概率dp证明题