P6690 一次函数
题目描述
给定 $n$ 个一次函数 $f_i(x) = a_ix + b_i$,其中 $x$ 为形式幂级数的占位符。
从这 $n$ 个中选出 $k$ 个 $g_i(x)$ ($1\leq i \leq k$),定义集合 $H$ 为 $g_i$ 的若干次幂的乘积模 $x^2$ 的值所构成的集合。即:
$$H=\left\{\prod_{i=1}^k g_i(x)^j\bmod x^2\middle|0 \leq a, b < p \right\}$$
其中 $j$ 是任意非负整数且对于每个 $i$ 可以有不同的 $j$。
需要注意的是,$0\cdot x+1$ 始终在集合 $H$ 中(而非 $0 \cdot x + 0$),即使 $k = 0$ 也是如此。
给定 $A, B$,求出所有满足 $Ax+B\in H$ 的集合 $H$ 的 $k$ 的最小值。
若不存在 $H$ 使得 $Ax+B\in H$,输出 `-1`。
所有运算均在模 $p$ 意义下进行。
输入格式
第一行四个整数 $n, p, A, B$。
接下来 $n$ 行,每行两个整数 $a_i, b_i$。
输出格式
第一行一个整数 $k$,表示答案。
若存在方案,接下来 $k$ 行,每行两个整数 $a, b$,需满足
$$\left(\prod f_a(x)^b\right)\bmod x^2=Ax + B$$
$a$ 的顺序可任意。
说明/提示
**另有两组大样例与 checker,下载地址见附件。**
要测试你某个测试点的答案,你需要在你本题目录下的命令行中执行:
`` []``
其中:
* ```` 表示校验器可执行文件;
* ```` 表示该测试点的输入文件,如 ``func1.in``;
* ```` 表示该测试点你的答案,如 ``func1.out``;
* ```` 表示该测试点的答案文件(只需要提供输出的第一行),如 ``func1.ans``;
* ```` 为可选参数,如果没有给定该参数,校验器将输出至终端;否则将输出至该文件,如 ``report1.txt``。
对于所有数据,$2\leq p\leq 10^9$,保证 $p$ 为质数,$1\leq n \leq 5 \times 10^3$,$0\leq a_i, A < p$,$1\leq b_i, B < p$。
详细的数据限制及约定如下(留空表示和上述所有数据的约定相同):
| 子任务编号 | 分值 | $n$ | $p$ | 特殊性质 |
| :----------: | :----------: | :----------: | :----------: | :----------: |
| $1$ | $5$ | $=1$ | $\leq 1000$ | |
| $2$ | $5$ | $\leq 3$ | $=7$ | |
| $3$ | $15$ | $\leq 100$ | $=31$ | |
| $4$ | $20$ | | | $A=B=1$ |
| $5$ | $25$ | $\leq 20$ | | |
| $6$ | $15$ | $\leq 500$ | | |
| $7$ | $15$ | | | |