对于一个用六边形无限平铺的平面,Pak Dengklek 站在其中一个格子上,并称该格子为初始格子。如果六边形平铺中的两个格子有公共边,则称它们是相邻的格子。对于一步移动,Pak Dengklek 可以从一个格子向六个可能的方向(从
于某个由
- 路径是 封闭 的,这意味着在格子序列中,起点格子与终点格子(即初始格子)相同。
- 路径是 简单 的,这意味着在格子序列中,除了初始格子访问过恰好两次(起点和终点分别访问一 次),其他格子只能被访问至多一次。
- 路径是 暴露 的,这意味着在格子序列中,每个格子与至少一个不在序列中出现过的非 内部格子 相邻。
- 如果一个格子不在格子序列中出现过,并且从它出发,在不经过格子序列中任何格子的情况下,(通过若干步移动) 只能访问到有限个格子,我们就称该格子是 内部格子 。
下图是一个符合上述条件的路径例子。其中:
号格子(粉色)是初始格子。- 被编号的格子(淡蓝色)组成格子序列,编号代表它被访问的顺序。
- 被标上叉号的格子(深蓝色)是内部格子。
构造出的领域只包含所有路径上的格子和内部格子。领域中格子
请帮助 Pak Dengklek 计算,用给出的行动序列构成的领域中,所有格子的分数之和。由于总分数值可能很大,最终结果对
实现细节
你需要实现下列函数:
int draw_territory(int N, int A, int B, int[] D, int[] L)
:行动序列中行动的次数。 :分数计算中的常数。 :大小为 的数组,其中 表示第 次行动的方向。 :大小为 的数组,其中 表示第 次行动的移动步数。- 函数应该返回用给出的行动序列所构成的领域中,所有格子的分数总和对
取模后的值。 - 该函数将被调用恰好一次。
例子
考虑下列调用:
draw_territory(17, 2, 3, [1, 2, 3, 4, 5, 4, 3, 2, 1, 6, 2, 3, 4, 5, 6, 6, 1], [1, 2, 2, 1, 1, 1, 1, 2, 3, 2, 3, 1, 6, 3, 3, 2, 1])
该行动序列和上述题面中给出的例子相同。下表列出了该领域中所有可能的距离值所对应的分数。
距离值 | 格子数 | 每个格子分数 | 总分数 |
---|---|---|---|
总分数值为
因此,draw_territory
应该返回
输入格式
示例测试程序将按以下格式读取输入数据:
- 第
行: - 第
行:
输出格式
示例测试程序将按以下格式输出你的答案:
- 第 draw_territory
的返回值。
限制与约定
中的元素之和不超过 。- 给出的行动序列所对应的路径一定是 封闭、简单 和 暴露 的。
子任务:
实际测试中,前 12 个 subtask 为数据包,后 8 个 subtask 为 8 个子任务。
- (
分) - (
分) - (
分) 中的元素之和不超过 - (
分) 中的元素之和不超过 - (
分) - (
分) 中的元素之和不超过 - (
分) - (
分) 无附加限制
时间限制:
空间限制: