#P6690. 一次函数

    ID: 5648 远端评测题 1000ms 256MiB 尝试: 0 已通过: 0 难度: 7 上传者: 标签>动态规划,dp2020洛谷原创Special JudgeO2优化扩展欧几里德,扩欧构造洛谷月赛

一次函数

题目描述

给定 nn 个一次函数 fi(x)=aix+bif_i(x) = a_ix + b_i,其中 xx 为形式幂级数的占位符。

从这 nn 个中选出 kkgi(x)g_i(x)1ik1\leq i \leq k),定义集合 HHgig_i 的若干次幂的乘积模 x2x^2 的值所构成的集合。即:

$$H=\left\{\prod_{i=1}^k g_i(x)^j\bmod x^2\middle|0 \leq a, b < p \right\} $$

其中 jj 是任意非负整数且对于每个 ii 可以有不同的 jj

需要注意的是,0x+10\cdot x+1 始终在集合 HH 中(而非 0x+00 \cdot x + 0),即使 k=0k = 0 也是如此。

给定 A,BA, B,求出所有满足 Ax+BHAx+B\in H 的集合 HHkk 的最小值。

若不存在 HH 使得 Ax+BHAx+B\in H,输出 -1

所有运算均在模 pp 意义下进行。

输入格式

第一行四个整数 n,p,A,Bn, p, A, B

接下来 nn 行,每行两个整数 ai,bia_i, b_i

输出格式

第一行一个整数 kk,表示答案。

若存在方案,接下来 kk 行,每行两个整数 a,ba, b,需满足

(fa(x)b)modx2=Ax+B\left(\prod f_a(x)^b\right)\bmod x^2=Ax + B

aa 的顺序可任意。

1 997 603 648
200 61

1
1 140787

1 953 712 307
534 750

-1

3 7 6 5
3 4
5 6
4 6

2
2 5
1 20

提示

另有两组大样例与 checker,下载地址见附件。

要测试你某个测试点的答案,你需要在你本题目录下的命令行中执行:

<checker> <input‐file> <output‐file> <answer‐file> [<report‐file>]

其中:

  • <checker> 表示校验器可执行文件;
  • <input‐file> 表示该测试点的输入文件,如 func1.in
  • <output‐file> 表示该测试点你的答案,如 func1.out
  • <answer‐file> 表示该测试点的答案文件(只需要提供输出的第一行),如 func1.ans
  • <report‐file> 为可选参数,如果没有给定该参数,校验器将输出至终端;否则将输出至该文件,如 report1.txt

对于所有数据,2p1092\leq p\leq 10^9,保证 pp 为质数,1n5×1031\leq n \leq 5 \times 10^30ai,A<p0\leq a_i, A < p1bi,B<p1\leq b_i, B < p

详细的数据限制及约定如下(留空表示和上述所有数据的约定相同):

子任务编号 分值 nn pp 特殊性质
11 55 =1=1 1000\leq 1000
22 3\leq 3 =7=7
33 1515 100\leq 100 =31=31
44 2020 A=B=1A=B=1
55 2525 20\leq 20
66 1515 500\leq 500
77