QOJ.ac

QOJ

実行時間制限: 5.0 s メモリ制限: 1024 MB 満点: 100 ハック可能 ✓

#17853. 螺旋图案

統計

随着时间的流逝,人们对螺旋图案愈发着迷。他们开始在流动的光影中、在雕刻的石块上、以及在建筑物的地板中注意到它们。

起初,这些螺旋只是作为隐约的迹象出现——但不久之后,它们便在整个岛屿上随处可见。

追寻这些残留螺旋的痕迹,并恢复它们曾经揭示的形态。


方形广场的地板上刻有一个大小为 $N \times M$ 的网格。从上往下数第 $r$ 行、从左往右数第 $c$ 列的单元格记为 $(r, c)$。

最近,在这个网格上共观测到了 $K$ 个螺旋图案。

每个螺旋都以一个特定的位置为中心,并具有一定的半径。下图展示了半径分别为 0、2 和 4 的螺旋图案示例:

(为了清晰起见,图中显示了网格线;只有着色的单元格才代表实际的螺旋图案。)

对于网格中的每个单元格,确定有多少个螺旋图案包含该单元格。

输入格式

第一行包含三个整数 $N$、$M$ 和 $K$:分别表示网格的行数、列数以及螺旋图案的数量。

第二行包含两个整数 $p$ 和 $q$。

接下来的 $K$ 行,每行包含三个整数 $r_i$、$c_i$、$d_i$。这表示第 $i$ 个观测到的螺旋图案以单元格 $(r_i, c_i)$ 为中心,半径为 $d_i$。

数据范围

  • $2 \le N \le 2000$
  • $2 \le M \le 2000$
  • $1 \le K \le 10^6$
  • $0 \le p \le 10^6$
  • $0 \le q \le 10^6$
  • $0 \le d_i$ ($1 \le i \le K$)
  • $d_i$ 为偶数 ($1 \le i \le K$)
  • $1 \le r_i - d_i$ ($1 \le i \le K$)
  • $r_i + d_i \le N$ ($1 \le i \le K$)
  • $1 \le c_i - d_i$ ($1 \le i \le K$)
  • $c_i + d_i \le M$ ($1 \le i \le K$)

输出格式

对于所有满足 $1 \le r \le N$ 且 $1 \le c \le M$ 的 $(r, c)$,令 $A_{rc}$ 表示包含单元格 $(r, c)$ 的螺旋图案数量。由于输出所有的 $A_{rc}$ 值会消耗大量时间,因此请输出以下单个整数:

$$\sum_{r=1}^{N} \sum_{c=1}^{M} ((r \times p) \oplus (c \times q) \oplus A_{rc})$$

其中,$\oplus$ 表示按位异或(XOR)操作。

子任务

  • 子任务 1(2 分):$d_i = 0$ ($1 \le i \le K$)
  • 子任务 2(7 分):$K = 1$
  • 子任务 3(4 分):$p = q = 0$
  • 子任务 4(6 分):$N \le 100, M \le 100, K \le 100$
  • 子任务 5(27 分):$K \le 2000$
  • 子任务 6(16 分):$2d_i + 1 = M$ ($1 \le i \le K$)
  • 子任务 7(38 分):无附加限制。

样例

输入样例 1

11 9 3
1 2
5 6 2
7 5 4
1 1 0

输出样例 1

1063

输入样例 2

37 28 1
79 1101
14 11 8

输出样例 2

16529317

说明

螺旋图案的精确定义如下:

  • 半径为 0 的螺旋图案定义为大小为 $1 \times 1$ 的单个单元格。
  • 对于所有偶数 $d \ge 2$,半径为 $d$ 的螺旋图案可以通过以下方式创建:
    • 准备一个大小为 $(2d + 1) \times (2d + 1)$ 的网格。
    • 在网格中心涂色半径为 $d - 2$ 的螺旋图案。
    • 从上述已涂色单元格的右下角单元格开始,向右再涂色两个单元格。
    • 从最后一个涂色的单元格开始,依次向上涂色 $2d - 2$ 个单元格,向左涂色 $2d$ 个单元格,向下涂色 $2d$ 个单元格,向右涂色 $2d$ 个单元格。

使用这种方法,一个 $d = 4$ 的螺旋图案如下所示:

Discussions

About Discussions

The discussion section is only for posting: General Discussions (problem-solving strategies, alternative approaches), and Off-topic conversations.

This is NOT for reporting issues! If you want to report bugs or errors, please use the Issues section below.

Open Discussions 0
No discussions in this category.

Issues

About Issues

If you find any issues with the problem (statement, scoring, time/memory limits, test cases, etc.), you may submit an issue here. A problem moderator will review your issue.

Guidelines:

  1. This is not a place to publish discussions, editorials, or requests to debug your code. Issues are only visible to you and problem moderators.
  2. Do not submit duplicated issues.
  3. Issues must be filed in English or Chinese only.
Active Issues 0
No issues in this category.
Closed/Resolved Issues 0
No issues in this category.