AT_ndpc2026_h コイン拾い
题目描述
给定一个 $N \times N$ 的网格。令 $(i, j)$ 表示第 $i$ 行(自上而下)第 $j$ 列(自左而右)的方格。
每个方格的状态由 $N$ 个长度为 $N$ 的字符串 $S_1, S_2, \dots, S_N$ 描述。
如果 $S_i$ 的第 $j$ 个字符为 `@`,则 $(i, j)$ 这个格子里有一个硬币;如果是 `.`,则该格为空格。
你从 $(1,1)$ 这个格子出发,保证 $(1,1)$ 为空。
你可以不限次数(包括可以不操作)地进行如下操作:
- 设当前位置为 $(i, j)$,你可以移动到右边的格子 $(i, j+1)$ 或下方的格子 $(i+1, j)$,不能移出网格。若移动到的格子内有硬币,必须捡起它。
对于每个 $x = 0, 1, \dots, 2N-2$,请解答:
- 在进行若干(可能为零)次操作后,你到达某个格子 $(i, j)$,并且恰好捡到了 $x$ 枚硬币。这样的格子 $(i, j)$ 一共有多少个?
输入格式
输入由标准输入给出,格式如下:
> $N$
> $S_1$
> $S_2$
> $\vdots$
> $S_N$
输出格式
输出 $2N-1$ 行。第 $i$ 行输出 $x = i-1$ 时的答案。
说明/提示
### 部分分数
本题采用部分分数制。
- 若你能解决 $N \leq 1500$ 的数据,可以获得 $2$ 分。
### 样例解释 1
例如当 $x=0$ 时,可以到达的格子 $(i, j)$ 有 $(1,1), (2,1), (2,2), (3,2), (3,3)$,共 $5$ 个。
### 数据范围
- $2 \leq N \leq 4000$
- $S_1, S_2, \dots, S_N$ 均为长度为 $N$ 的字符串,仅包含 `@` 与 `.`
- $S_1$ 的第一个字符为 `.`
- $N$ 为整数。
由 ChatGPT 5 翻译