CF1857F Sum and Product

题目描述

你有一个长度为 $n$ 的数组 $a$。 你的任务是回答 $q$ 个询问:给定 $x, y$,求有多少对 $i$ 和 $j$($1 \le i < j \le n$)满足 $a_i + a_j = x$ 且 $a_i \cdot a_j = y$。 例如,对于数组 $[1,3,2]$,询问 $x=3, y=2$ 时,答案为 $1$: - $i=1$ 和 $j=2$ 不满足,因为 $1+3=4$ 不是 $3$,且 $1 \cdot 3=3$ 不是 $2$; - $i=1$ 和 $j=3$ 满足两个条件; - $i=2$ 和 $j=3$ 不满足,因为 $3+2=5$ 不是 $3$,且 $3 \cdot 2=6$ 不是 $2$。

输入格式

第一行包含一个整数 $t$($1 \le t \le 10^4$),表示测试用例的数量。 每个测试用例的第二行包含一个整数 $n$($1 \le n \le 2 \cdot 10^5$),表示数组 $a$ 的长度。 每个测试用例的第三行包含 $n$ 个整数 $a_1, a_2, \dots, a_n$($1 \le |a_i| \le 10^9$),表示数组 $a$。 每个测试用例的第四行包含一个整数 $q$($1 \le q \le 2 \cdot 10^5$),表示询问的数量。 接下来的 $q$ 行,每行包含两个整数 $x$ 和 $y$($1 \le |x| \le 2 \cdot 10^9, 1 \le |y| \le 10^{18}$),表示一次询问。 保证所有测试用例中 $n$ 的总和不超过 $2 \cdot 10^5$,所有测试用例中 $q$ 的总和也不超过 $2 \cdot 10^5$。

输出格式

对于每个测试用例,输出一行包含 $q$ 个数字,分别表示每个询问的答案。

说明/提示

对于第一个测试用例,我们分别分析每一对数字: - 对 $(a_1, a_2)$:$a_1 + a_2 = 4$,$a_1 \cdot a_2 = 3$ - 对 $(a_1, a_3)$:$a_1 + a_3 = 3$,$a_1 \cdot a_3 = 2$ - 对 $(a_2, a_3)$:$a_2 + a_3 = 5$,$a_2 \cdot a_3 = 6$ 由此可见,对于第一个询问,$(a_1, a_3)$ 这对是合适的;对于第二个询问,是 $(a_2, a_3)$;对于第三和第四个询问没有合适的对。在第二个测试用例中,所有的数对组合都是合适的。 由 ChatGPT 4.1 翻译