A91479.最大模意义下子序列

普及+/提高

通过率:0%

时间限制:1.00s

内存限制:128MB

题目描述

给定一个包含 nn 个整数的数组 aa,以及一个整数 mm。你需要从中选择若干个下标,组成一个严格递增的下标序列

b1,b2,,bk(1b1<b2<<bkn),b_1, b_2, \dots, b_k \quad (1 \le b_1 < b_2 < \dots < b_k \le n),

使得下面这个值尽可能大:

(i=1kabi)modm.\left(\sum_{i=1}^k a_{b_i}\right) \bmod m.

你也可以一个数都不选,此时视为选出的下标序列为空,和为 00,取模后的值为 00

请你输出上述表达式可能取得的最大值

输入格式

第一行包含两个整数 nnmm

  • 1n351 \le n \le 35
  • 1m1091 \le m \le 10^9

第二行包含 nn 个整数 a1,a2,,ana_1, a_2, \dots, a_n,满足:

  • 1ai1091 \le a_i \le 10^9

输出格式

输出一个整数,表示

(i=1kabi)modm\left(\sum_{i=1}^k a_{b_i}\right) \bmod m

在所有合法选择下标序列的方案中,能够取得的最大值。

输入输出样例

  • 输入#1

    4 4
    5 2 4 1

    输出#1

    3
  • 输入#2

    3 20
    199 41 299

    输出#2

    19

说明/提示

样例解释 #1

一种最优做法是选择下标集合 {1,2}\{1, 2\},此时

a1+a2=5+2=7,7mod4=3,a_1 + a_2 = 5 + 2 = 7,\quad 7 \bmod 4 = 3,

可以证明这是能够得到的最大值。

样例解释 #2

一种最优做法是只选择下标 33,此时

a3=299,299mod20=19,a_3 = 299,\quad 299 \bmod 20 = 19,

为可以取得的最大值。

数据范围与说明

  • 1n351 \le n \le 35
  • 1m1091 \le m \le 10^9
  • 1ai1091 \le a_i \le 10^9
  • 你可以选择的下标序列可以为空,此时结果为 00
首页