蜘蛛侠(Peter)还在上高中。我们这位友好的邻家超级英雄在学校里有 $N$ 门科目,编号从 $0$ 到 $N-1$。对于每一门 Peter 通过的科目,他都会从托尼·斯塔克那里获得一笔奖金。如果 Peter 通过了第 $i$ 门科目,他将获得 $A_i$ 美元。
通过一门科目不幸的是并不那么容易。为了通过考试,他需要购买一些教科书。当然,我们这位超级英雄非常聪明,他不需要教科书来学习,但有些老师如果不让他投入一些钱买书,就不会让他通过。共有 $N$ 本教科书,编号从 $0$ 到 $N-1$,其中第 $i$ 本书的价格为 $B_i$ 美元。
为了通过第 $i$ 门科目,Peter 需要购买教科书 $i, (i + 1) \pmod N, (i + 2) \pmod N, \dots, (i + K - 1) \pmod N$,其中 $K$ 是一个给定的常数。
Peter 已经不再关心学校了,因为他的梦想是成为一名复仇者,所以他是否通过所有科目并不重要。Peter 珍惜时间,而时间就是金钱,所以请帮助 Peter 获得最大的利润。
交互
参赛者应包含头文件 homecoming.h (C / C++) 或实现 homecoming.pas (Pascal)。
参赛者需要实现以下函数:
long long int solve(int N, int K, int *A, int *B);
function solve(N, K: LongInt, var A, B: array of LongInt): Int64;
该函数在单次运行中可能会被调用多次。
数据范围
令 $S_N$ 为所有 solve 调用中 $N$ 的总和,令 $S_{NK}$ 为所有 solve 调用中 $N \times K$ 的总和。则:
- $1 \le K \le N \le 2.000.000$
- $1 \le S_N \le 2.000.000$
- $0 \le A_i, B_i \le 1.000.000.000$
子任务
子任务 1 (13 分) * $1 \le S_N \le 500$
子任务 2 (18 分) * $1 \le S_N \le 5.000$
子任务 3 (31 分) * $1 \le S_{NK} \le 2.000.000$
子任务 4 (38 分) * 无附加限制。
样例
输入格式 1
solve(3, 2, [40, 80, 100], [140, 0, 20])
输出格式 1
60
说明
- 给定两个正数 $A$ 和 $B$,$A \pmod B$ 表示 $A$ 除以 $B$ 的余数。
- 可见测试点不会与其他测试点合并。