luogu#P11405. [RMI 2020] 秘鲁 / Peru

[RMI 2020] 秘鲁 / Peru

题目背景

译自 8th Romanian Master of Informatics, RMI 2020 D1T3。0.2s,0.25G\texttt{0.2s,0.25G}

题目描述

这是一道(函数式)交互题。

NN 只甲虫在桌面上排成一行,从左到右编号为 0N10\sim N-1。第 ii 只甲虫的体力SiS_i

每次可以选择连续的至多 KK 只甲虫,用 EE 的力量去击打它们。被击打的甲虫,若体力不大于 EE,则会死亡,否则无事发生。死亡的甲虫会留在原地,可以击打死亡的甲虫。

可以多次击打甲虫,每次 EE 的大小可以不同。

定义 f(i)f(i) 为:杀死最左边的 ii 只甲虫,需要力量和的最小值。对于 i=1,2,,Ni=1,2,\cdots,N,求出 f(i)f(i)

为了减小输出量,你只需要求出 $\displaystyle \left(\sum_{1\le i\le N} f(i)\cdot 23^{N-i}\right)\bmod (10^9+7)$。

实现细节

你不需要,也不应该实现 main 函数。

你需要实现以下的函数:

int solve(int N, int K, int S[]);

交互库会调用 solve 函数恰好一次。参数的含义:

  • N:甲虫数量。
  • K:一次击打最多击打的连续甲虫数。
  • S:每只甲虫的体力。

返回一个整数表示 $\displaystyle \left(\sum_{1\le i\le N} f(i)\cdot 23^{N-i}\right)\bmod (10^9+7)$。

输入格式

Sample grader 按照如下格式读取输入:

第一行,两个正整数 N,KN,K

第二行,NN 个正整数 S1,S2,,SNS_1,S_2,\cdots,S_{N}

输出格式

Sample grader 输出一个整数,表示选手返回的答案。

8 3
3 2 9 8 7 11 3 4
720026253

提示

样例解释

ff 的值分别为 3,3,9,12,12,20,23,233,3,9,12,12,20,23,23

数据范围

对于 100%100\% 的数据,保证:

  • 1KN2.5×1061\le K\le N\le 2.5\times 10^6
  • 1Si2×1091\le S_i\le 2\times 10^9
子任务编号 N,QN,Q\le 得分
1 1 2×103 2\times 10^3 1818
2 2 4×105 4\times 10^5 3131
3 3 2.5×106 2.5\times 10^6 5151