Codeforces 题面传送门 & 洛谷题面传送门

虽说是一个 D1B,但还是想了我足足 20min,所以还是写篇题解罢(

首先注意到这个式子里涉及两个参数,如果我们选择固定一个并动态维护另一个的决策,则相当于我们要求方程 \(ax^3+bx^2+cx+d\equiv k\pmod{p}\) 的根,而这是很难维护的,因此这个思路行不通。考虑 \((x+y)(x^2+y^2)\) 的性质,我们考虑在前面添上一项 \((x-y)\),根据初中数学 \((x-y)(x+y)(x^2+y^2)=x^4-y^4\),因此 \((x+y)(x^2+y^2)=\dfrac{x^4-y^4}{x-y}\),因此我们即需求 \(\dfrac{a_i^4-a_j^4}{a_i-a_j}\equiv k\pmod{p}\) 的 \((i,j)\) 个数,两边同乘 \((a_i-a_j)\) 再移个项可得 \(a_i^4-ka_i\equiv a_j^4-ka_j\pmod{p}\),map 维护即可,由于 \(a_i\ne a_j\),所以左边的分式肯定有意义。

虽说是个 *2300,但还是让我学到了许多,稍微总结一下吧:

  • 看到 \(p\)​ 是质数这样的条件,大部分情况都要用到某些数在 \(\bmod p\) 意义下的逆元,极少数情况与二次剩余有关。
  • 看到序列中两两元素不同的条件,复杂度有可能与 \(\sum\limits_{i=1}^n\dfrac{n}{a_i}\) 有关,因为调和级数是 \(n\ln n\) 的,如 CF1553F。也有可能要用到 \(a_i-a_j\) 的逆元,如本题。
  • 如果我们要统计满足 \(\dfrac{X(i,j)}{Y(i,j)}\equiv k\pmod{p}\) 的 \((i,j)\) 个数,并且 \(X(i,j),Y(i,j)\) 都可以写作 \(na_i+ma_j\) 的形式,那么把 \(Y(i,j)\) 乘到右边去统计起来会很方便,其他情况可以考虑向这种情况转化。注意特判 \(Y(i,j)=0\) 的情况。
const int MAXN=3e5;
int n,k,p,a[MAXN+5];map<int,int> t;
int calc(int x){return (1ll*x*x%p*x%p*x%p-1ll*k*x%p+p)%p;}
int main(){
scanf("%d%d%d",&n,&p,&k);ll res=0;
for(int i=1;i<=n;i++) scanf("%d",&a[i]);
for(int i=1;i<=n;i++) res+=t[calc(a[i])],t[calc(a[i])]++;
printf("%lld\n",res);
return 0;
}

Codeforces 1188B - Count Pairs(思维题)的更多相关文章

  1. Codeforces 1188B Count Pairs (同余+分离变量)

    题意: 给一个3e5的数组,求(i,j)对数,使得$(a_i+a_j)(a_i^2+a_j^2)\equiv k\ mod\ p$ 思路: 化简$(a_i^4-a_j^4)\equiv k(a_i-a ...

  2. CodeForces - 1189E Count Pairs(平方差)

    Count Pairs You are given a prime number pp, nn integers a1,a2,…,ana1,a2,…,an, and an integer kk. Fi ...

  3. CF--思维练习-- CodeForces - 215C - Crosses(思维题)

    ACM思维题训练集合 There is a board with a grid consisting of n rows and m columns, the rows are numbered fr ...

  4. Codeforces 675C Money Transfers 思维题

    原题:http://codeforces.com/contest/675/problem/C 让我们用数组a保存每个银行的余额,因为所有余额的和加起来一定为0,所以我们能把整个数组a划分为几个区间,每 ...

  5. Codeforces 1090D - Similar Arrays - [思维题][构造题][2018-2019 Russia Open High School Programming Contest Problem D]

    题目链接:https://codeforces.com/contest/1090/problem/D Vasya had an array of n integers, each element of ...

  6. Covered Points Count(思维题)

    C. Covered Points Count time limit per test 3 seconds memory limit per test 256 megabytes input stan ...

  7. Codeforces 1189E. Count Pairs

    传送门 可以算是纯数学题了吧... 看到这个 $(x+y)(x^2+y^2)$ 就可以想到化简三角函数时经常用到的操作,左右同乘 那么 $(a_i+a_j)(a_i^2+a_j^2) \equiv  ...

  8. codeforces 652C Foe Pairs 水题

    题意:给你若干个数对,给你一个序列,保证数对中的数都在序列中 对于这个序列,询问有多少个区间,不包含这些数对 分析:然后把这些数对转化成区间,然后对于这些区间排序,然后扫一遍,记录最靠右的左端点就好 ...

  9. codeforces 1140D(区间dp/思维题)

    D. Minimum Triangulation time limit per test 2 seconds memory limit per test 256 megabytes input sta ...

随机推荐

  1. 编程题:X星人的金币

    X星人的金币 时问限制:3000MS 内存限制:589824KB 题目描述: X是人在一艘海底沉船上发现了很多很多很多金币.可爱的X星人决定用这些金币来玩一个填格子的游戏.其规则如下:第1个格子放2枚 ...

  2. 《JavaScript DOM编程艺术》:+= 相加之后再赋值

    第2章  第20页 += var year = 2010; var message = "The year is"; message += year; message += yea ...

  3. [对对子队]会议记录4.13(Scrum Meeting 4)

    今天已完成的工作 梁河览 ​ 工作内容:初步完成存档功能 ​ 相关issue:实现游戏内UI界面使用的组件 马嘉 ​ 工作内容:找到了原料组件 ​ 相关issue:实现游戏内UI界面使用的组件 吴昭邦 ...

  4. [对对子队]团队任务拆解Alpha

    Alpha阶段主要目标 完成游戏场景的基本实现(不要求美术资源) 完成游戏UI的基本实现(不要求美术资源) 制作第一部分的关卡(顺序语句,制作3-5关) 完成第一部分关卡和游戏基本逻辑的测试 任务分解 ...

  5. 软件案例分析——VS、VS Code

    软件案例分析--VS和VS Code 第一部分 调研,测评 一.使用10–30分钟这个软件的基本功能(请上传使用软件的照片) VS code Visual Studio 二.主要功能和目标用户有何不同 ...

  6. 深入理解Linux C语言内存管理

    问题不能拖,我这就来学习一下吧,争取一次搞定. 在任何程序设计环境及语言中,内存管理都十分重要. 内存管理的基本概念 分析C语言内存的分布先从Linux下可执行的C程序入手.现在有一个简单的C源程序h ...

  7. Python课程笔记(四)

    1.模块的导入 相当于Java的包或C语言的头文件 (1) import math s = math.sqrt(25) print(s) (2) from math import sqrt s=mat ...

  8. tcp 三次握手建立连接难点总结

    所谓三次握手(Three-way Handshake),是指建立一个TCP连接时,需要客户端和服务器总共发送3个包. 三次握手的目的是连接服务器指定端口,建立TCP连接,并同步连接双方的序列号和确认号 ...

  9. Java Logback简易教程

    本作品采用知识共享署名-非商业性使用 4.0 国际许可协议进行许可. 一.前言 本文以一个简单的项目为例,一步步展示logback的同步和异步配置方法,并且配置的日志要求满足阿里巴巴Java开发手册- ...

  10. ONVIF客户端中预置位设置代码实现过程

    simpleOnvif的功能:提供支持Windows.Linux.arm.Android.iOS等各种平台的SDK库,方便集成,二次开发 之前跟大家分享了我们安徽思蔷信息科技的simpleOnvif的 ...