码迷,mamicode.com
首页 > 其他好文 > 详细

Codeforces 1189E. Count Pairs

时间:2019-10-23 22:08:28      阅读:88      评论:0      收藏:0      [点我收藏+]

标签:font   namespace   ==   tchar   数学   左右   cstring   include   操作   

传送门

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

看到这个 $(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_i\equiv 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\n",ans);
    return 0;
}

 

Codeforces 1189E. Count Pairs

标签:font   namespace   ==   tchar   数学   左右   cstring   include   操作   

原文地址:https://www.cnblogs.com/LLTYYC/p/11729032.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!