有
A 和 B 正在轮流玩一个游戏,该游戏会进行多轮。
每轮开始时,如果所有可用的物品都已经被取走,游戏将立刻结束。否则,A 必须选择一件未被取走的物品,将其取走。
假设 A 取走的物品编号为
A 和 B 都想最大化自己取走的物品的价值之和,我们假定 A 与 B 都采取了最优策略。
此外,在游戏开始前,有一些物品可能是不可用的。在游戏过程中,不可用的物品将会被忽略,即:A 和 B 都不能取走不可用的物品;当所有可用的物品都已经被取走时,游戏立刻结束。
初始时,所有物品都是可用的。你的程序需要支持
不幸的是,这是一道 IO 题,物品的数量可能会达到
输入格式
从标准输入读入数据。
输入的第一行包含四个正整数
输入的第二行包含
接下来的
输出格式
输出到标准输出。
输出
样例一
input
5 2 3 2 1 3 2 1 1
output
3 4
explanation
在这组样例中,
在第一次操作后,物品
在第二次操作后,所有物品都处于可用状态。双方都采取最优策略进行游戏,最终 B 取走的物品价值之和为
样例二
input
10 4 5 5 40 355 190 215 161 3 4 0 3 4
output
581 460 420 541 702
样例三
见附件下载。
数据范围与提示
Subtask 1 (5 pts) :
Subtask 2 (10 pts) :
Subtask 3 (15 pts) :
Subtask 4 (30 pts) :
Subtask 5 (40 pts) : 无特殊限制。
如有需要,可以使用 __int128
处理 long long
乘法取模,下面是一个使用 __int128
计算
long long a = 1e15; long long b = 1e15; long long m = 12345678910; long long c = ((__int128) a * b) % m;