小团和小美正在密室中解密。他们现在来到了一个新的关卡面前。这一关是一个配合关卡,有n个巨大的齿轮摆成一排,每个齿轮上有两个按钮和按顺时针排成一环的26个大写字母。在齿轮的最上面有一个孔,透过孔可以看到齿轮最上方的字母。 小团发现,每次他可以按住一个齿轮的一个按钮,小美就可以顺时针移动这个齿轮,使得孔里看到的字母变为其对应的下一个字母(比如A变为B,Y变为Z),并且如果小团按下的第一个按钮,则齿轮与上一个齿轮咬合,上一个齿轮的能看见的字母会变为其减1的字母(即B变为A,Z变为Y),进行这个操作的时候,不会影响上一个齿轮之前的齿轮。如果小团按下的第二个按钮,则下一个齿轮能看见的字母会变为其减1的字母,同样,这个操作不会影响下一个齿轮之后的齿轮。 如果这个齿轮是第一个齿轮,或者上一个齿轮的字母为A,小团按下第一个按钮后小美将不能移动。同理,如果这个齿轮是最后一个齿轮,或者下一个齿轮的字母为A,小团按下第二个按钮后小美将不能移动。 如果该齿轮上的字母是Z,该齿轮按下按钮后也不能移动。这个齿轮组的某个状态所组成的字符串将会是通关密码。 现在,小团想计算出可以变化出多少种齿轮的组合,他会依据这个数字来计算是否可以暴力计算出密码。请你帮助他。
输入包含多组数据。对于每组数据,将会输入两行。 第一行会输入一个数n,代表齿轮的个数。 接下来一行n个大写字母,代表每个齿轮最开始能看见的字母。
对于每组数据,输出一行一个数字,代表密码可能的组合数,对998244353取模。
2 BB 3 ABA
3 3
考点:组合数学
限制 1 秒 / 256MB | 标准输入输出
参考方向:组合数学
用计数原理(加法/乘法原理)与组合数公式统计方案数。
思路框架(组合数学 通法 · 非本题专属)
实现要点:阶乘预处理 + 费马小定理求逆元可以在 O(1) 内算任意组合数。
复杂度:时间 O(n) 预处理 / O(1) 查询 | 空间 O(n)
该范式的通法易错点
本题在源数据中没有官方考点标签,方向由题面特征推断,仅供参考。
样例 1:输入 2 / BB / 3 / ABA → 输出 3 / 3
对于样例1,有以下三种最终可能的组合:AC,BB,CA
对于样例2,有以下三种最终可能的组合:BAA,ABA,AAB
对于样例2,一开始的状态如图第一行所示,其中,红色箭头指向的是透过小孔看得见的字母。
小团选择第1个齿轮的第2个按钮按下,小美旋转后,会变为图第二行的状态
小团选择第3个齿轮的第1个按钮按下,小美旋转后,会变为图第三行的状态
解析由校招宝本地引擎整理(依据源站考点标签 / 人工判题标注 / 题面规模信号),非官方题解,仅供思路参考。
本题来源:美团2023校招技术第6场编程题。