1407: 一元二次函数(hard)

Memory Limit:256 MB Time Limit:1.000 S
Judge Style:Text Compare Creator:
Submit:20 Solved:2

Description

本题有两个版本,此版本和另外一个版本差异只是N的数据范围不同
给定一个长度为$N$的序列$A$,一个定值$M$,和$Q$个询问,每一个询问将会给定一个$x$。
你可以进行这样的构造:      
  •     初始化$a = 0,b = 0,c = 0$.
  •     遍历序列$A$,每次遍历将$A_i$累加到$a,b,c$三个值中的其中一个值上
  •     $a,b,c$都要被至少累加1次
于是你构造出了一个二次函数$f(x) = a*x^2+b*x+c$

对于每个询问,请你计算出最大的$f(x)~mod M$
(你要最大化的值为 f(x) mod M ,而不是f(x))

Input

第一行,三个整数$N,M,Q$
第二行,$N$个整数,$A_1,A_2,A_3…A_N$
第三行,$Q$个整数,$x_1,x_2,x_3…x_Q$


数据范围:
$3\leq N \leq 26$ 
$2 \leq  M \leq 648$ 
$1\leq Q \leq 100$ 
$0\leq A_i \leq 10^6$ 
$0\leq x_i \leq  10^6$ 

Output

一行,输出Q个整数,代表每个询问求出的最大$f(x_{i}) mod M$

Sample Input Copy

3 4 2
1 2 5
2 0

Sample Output Copy

3 2

HINT

样例中的第一个查询 $x_1 = 2$ 时,可以构造一个函数 $f(x) = 2*x^2+x+5$, mod M后得到的值为3,可以保证不会有其他构造超过这个解。第二个查询$x_2 = 0$时,构造的函数为$f(x)=5*x^2+x+2$,得到的解为2

Source/Category