QOJ.ac

QOJ

実行時間制限: 1 s メモリ制限: 512 MB 満点: 100

#7725. 仅求两数之和

統計

你得到了一张黑白图像,其中表示了两个整数的和,每个整数都用正字计数法(tally marks)表示。你的任务是确定这两个整数的和。

正字计数法是一种众所周知的数字表示方式。当你在递增计数时不想擦除之前的记录,就会使用这种方法。在这种表示法中,一个数字 $x$ 被拆分为尽可能多的 5,加上剩余的标记。每个 5 由四条竖线和一条穿过这四条竖线的横线表示。剩余的标记则由相应数量的竖线表示。

图像由多个区域组成,每个区域包含多个扇区。斜线表示为直线段。为了绘制线段,连接来自不同扇区的两个不同像素以形成线段的端点。线段端点的粗细是预先定义的,线段的粗细从一个端点到另一个端点线性变化。端点的粗细取决于其所在扇区的宽度(sectorwidth)和/或高度(sectorheight)。

共有三种类型的区域,每种区域具有不同的尺寸以及竖线和横线的排列方式。最初,所有区域的中心位于同一条水平线上,一个接一个排列。相邻区域之间的距离在 10 到 20 像素之间。

区域类型如下:

  • $R_x$:$x$ 条竖线($1 \le x \le 4$),表示数值 $x$。 该区域的高度在 10 到 120 像素之间,宽度在 $10x$ 到 $30x$ 像素之间。该区域被划分为 $3 \times (2x+1)$ 个等尺寸的扇区网格。线段从扇区 $(1, 2i)$ 绘制到扇区 $(3, 2i)$,其中 $i \in [1, x]$。线段端点的粗细在 $1$ 到 $1 + \frac{\text{sectorwidth}}{8}$ 之间。

  • $R_5$:5 条斜线(四条竖线和一条横线),表示数值 5。 该区域的高度在 10 到 120 像素之间,宽度在 40 到 120 像素之间。该区域被划分为 $3 \times 11$ 个等尺寸的扇区网格。线段从扇区 $(1, 2i)$ 绘制到扇区 $(3, 2i)$,其中 $i \in [1, 4]$,最后一条线段从扇区 $(2, 1)$ 绘制到扇区 $(2, 11)$。线段端点的粗细在 $1$ 到 $1 + \frac{\text{sectorwidth}}{8}$ 之间。

  • $P$:表示加号。 该区域的高度和宽度均在 40 到 80 像素之间。该区域被划分为 $7 \times 7$ 个等尺寸的扇区网格。一条竖线从扇区 $(1, 4)$ 绘制到 $(7, 4)$,粗细从 $1$ 到 $1 + \frac{\text{sectorwidth}}{9}$。一条横线从扇区 $(4, 1)$ 绘制到 $(4, 7)$,粗细从 $1$ 到 $1 + \frac{\text{sectorheight}}{9}$。

整个表达式由以下区域序列表示:$R_5, R_5, \dots, R_5, R_a, P, R_5, R_5, \dots, R_5, R_b$,其中 $a, b \in [1, 5]$。

在绘制所有线段后,所有区域会垂直移动不超过 $\frac{h}{2}$ 像素($h$ 为区域高度)。最后,整个图像会旋转一定的角度。你可以假设旋转后,所有线段都位于图像边界内。此外,保证不应该相交或接触的线段不会发生此类情况。(如果两个线段的像素在水平、垂直或对角方向上相邻,则认为这两个线段接触。)应该相交的线段是穿过同一区域竖线的横线以及构成加号的线段。

此外,需要注意的是,由于离散化,线段边缘可能会出现缺陷。这些缺陷表现为轻微的错位或间隙,但它们仅出现在边缘处。

输入格式

第一行包含两个整数 $n$ 和 $m$($100 \le n, m \le 1000$),分别表示图像的高度和宽度。

接下来的 $n$ 行,每行包含 $m$ 个字符,每个字符要么是句点“.”,要么是井号“#”。句点表示白色像素,井号表示黑色像素。图像背景为白色,所有线条均为黑色。

输出格式

输出一个整数:图像中表示的两个数字之和。

样例

输入格式 1

100 354
(图像数据)

输出格式 1

17

输入格式 2

135 269
(图像数据)

输出格式 2

14

输入格式 3

292 450
(图像数据)

输出格式 3

18

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.