AT_joi2019ho_a 勇者ビ太郎 (Bitaro the Brave)
题目描述
勇者比太郎即将与魔王对峙。
比太郎在一个高 $H$ 行、宽 $W$ 列的格子上,分别放置了宝石(Jewel)、宝珠(Orb)、金块(Ingot),并打算通过发动魔法来攻击魔王。下面,将从上往下第 $i$ 行($1 \leq i \leq H$)、从左往右第 $j$ 列($1 \leq j \leq W$)的格子记作格子 $(i, j)$。
比太郎已经在每个格子上放置了上述三种物品中的一种。现在他准备发动魔法,而这次魔法的威力取决于格子上宝石、宝珠和金块的分布。具体来说,满足以下条件的整数四元组 $(i, j, k, l)$($1 \leq i < k \leq H$,$1 \leq j < l \leq W$)的个数,就是魔法的威力。
条件:格子 $(i, j)$ 上放有宝石,格子 $(i, l)$ 上放有宝珠,格子 $(k, j)$ 上放有金块。
比太郎很在意这次魔法的威力。
给定格子上宝石、宝珠、金块的分布,请编写程序计算比太郎发动的魔法的威力。
输入格式
输入从标准输入读入,格式如下:
> $H$ $W$
> $S_1$
> $\vdots$
> $S_H$
$S_i$($1 \leq i \leq H$)是长度为 $W$ 的字符串,第 $j$ 个字符($1 \leq j \leq W$)为 `J` 时表示格子 $(i, j)$ 上放有宝石,为 `O` 时表示放有宝珠,为 `I` 时表示放有金块。
输出格式
输出一个整数,表示魔法的威力。
说明/提示
## 限制
- $2 \leq H \leq 3000$。
- $2 \leq W \leq 3000$。
- $S_i$ 是长度为 $W$ 的字符串($1 \leq i \leq H$)。
- $S_i$ 的每个字符都是 `J`、`O`、`I` 之一($1 \leq i \leq H$)。
## 子任务
1. (20 分)$H \leq 100$,$W \leq 100$。
2. (30 分)$H \leq 500$,$W \leq 500$。
3. (50 分)无额外限制。
## 样例解释 1
在这个输入样例中,满足条件的 $(i, j, k, l) = (1, 1, 3, 2), (2, 1, 3, 3), (2, 1, 3, 4)$ 共 $3$ 组,因此答案为 $3$。
由 ChatGPT 4.1 翻译