AT_joi2016ho_b スタンプラリー 2 (Collecting Stamps 2)

题目描述

JOI 商店街沿着大街有 $N$ 家店铺,从入口到出口依次编号为 $1, 2, \ldots, N$。JOI 商店街是单向通行的,只能从入口向出口方向移动。 为了振兴商店街,JOI 商店街将举办一次集章活动。在这次集章活动中,每家店都准备了 `J`、`O`、`I` 三种印章中的一种,顾客在店内购物后可以在集章卡上盖章。参与活动的人恰好会进入 $3$ 家店。在入口处会发放有 $3$ 个栏位的集章卡,分别在第一次、第二次、第三次进入的店铺盖章。在出口处回收集章卡,如果盖章的顺序(按进入店铺的先后)恰好为 `J`、`O`、`I`,则可以在出口处获得商品券。如果盖章的种类或顺序不同,则无法获得商品券。 现在,$N$ 家店铺已经决定了各自准备哪种印章,但计划新开一家店,需要决定新店的位置和准备的印章。新店的位置可以选择在第 $i$ 家店和第 $i+1$ 家店之间($1 \leq i \leq N-1$)、入口与第 $1$ 家店之间,或第 $N$ 家店与出口之间。新店的印章可以从 `J`、`O`、`I` 三种中任选其一。 商店街认为,能获得商品券的店铺选择方式越多,集章活动就越热闹。因此,请你求出新店的位置和印章种类都确定时,能获得商品券的店铺选择方式的最大值。

输入格式

从标准输入读取以下内容。 - 第 $1$ 行包含一个整数 $N$,表示 JOI 商店街当前有 $N$ 家店铺。 - 第 $2$ 行包含一个仅由大写英文字母 `J`、`O`、`I` 组成的长度为 $N$ 的字符串 $S$。字符串 $S$ 的第 $i$ 个字符($1 \leq i \leq N$)表示第 $i$ 家店准备的印章种类。

输出格式

请输出能获得商品券的店铺选择方式的最大值,输出一行。 请注意,获得商品券的店铺选择方式的数量不一定能用 $32$ 位有符号整数表示。

说明/提示

## 任务 给定 JOI 商店街已有店铺准备的印章信息,请编写程序,求出新店的位置和印章种类都确定时,能获得商品券的店铺选择方式的最大值。 ## 限制 所有输入数据满足以下条件: - $3 \leq N \leq 100\,000$。 ## 子任务 ### 子任务 1 [30 分] - 满足 $N \leq 200$。 ### 子任务 2 [20 分] - 满足 $N \leq 3\,000$。 ### 子任务 3 [50 分] - 无额外限制。 ## 样例解释 1 在输入样例 $1$ 中,如果在第 $1$ 家店和第 $2$ 家店之间新开一家准备 `J` 印章的店,则从入口开始依次排列店铺的印章为 `JJOIOI`。此时,能获得商品券的店铺选择方式有以下 $6$ 种: - 进入第 $1, 3, 4$ 家店。 - 进入第 $1, 3, 6$ 家店。 - 进入第 $1, 5, 6$ 家店。 - 进入第 $2, 3, 4$ 家店。 - 进入第 $2, 3, 6$ 家店。 - 进入第 $2, 5, 6$ 家店。 在输入样例 $1$ 中,能获得商品券的店铺选择方式不会超过 $7$ 种。 ## 样例解释 2 - - - - - - ## 样例解释 3 在输入样例 $3$ 中,如果在入口与第 $1$ 家店之间新开一家准备 `J` 印章的店,能获得商品券的店铺选择方式数量达到最大。 由 ChatGPT 4.1 翻译