美团 · 组合数学 · 算法编程题
美团 组合数学 时限 1 秒 / 256 MB

题目描述

小团和小美正在密室中解密。他们现在来到了一个新的关卡面前。这一关是一个配合关卡,有n个巨大的齿轮摆成一排,每个齿轮上有两个按钮和按顺时针排成一环的26个大写字母。在齿轮的最上面有一个孔,透过孔可以看到齿轮最上方的字母。
小团发现,每次他可以按住一个齿轮的一个按钮,小美就可以顺时针移动这个齿轮,使得孔里看到的字母变为其对应的下一个字母(比如A变为B,Y变为Z),并且如果小团按下的第一个按钮,则齿轮与上一个齿轮咬合,上一个齿轮的能看见的字母会变为其减1的字母(即B变为A,Z变为Y),进行这个操作的时候,不会影响上一个齿轮之前的齿轮。如果小团按下的第二个按钮,则下一个齿轮能看见的字母会变为其减1的字母,同样,这个操作不会影响下一个齿轮之后的齿轮。
如果这个齿轮是第一个齿轮,或者上一个齿轮的字母为A,小团按下第一个按钮后小美将不能移动。同理,如果这个齿轮是最后一个齿轮,或者下一个齿轮的字母为A,小团按下第二个按钮后小美将不能移动。
如果该齿轮上的字母是Z,该齿轮按下按钮后也不能移动。这个齿轮组的某个状态所组成的字符串将会是通关密码。
现在,小团想计算出可以变化出多少种齿轮的组合,他会依据这个数字来计算是否可以暴力计算出密码。请你帮助他。

输入输出

输入描述
输入包含多组数据。对于每组数据,将会输入两行。
第一行会输入一个数n,代表齿轮的个数。
接下来一行n个大写字母,代表每个齿轮最开始能看见的字母。
输出描述
对于每组数据,输出一行一个数字,代表密码可能的组合数,对998244353取模。

样例共 1 组

样例 1 · 对于样例1,有以下三种最终可能的组合:AC,BB,CA 对于样例2,有以下三种最终可能的组合:BAA,ABA,AAB 对于样例2,一开始的状态如图第一行所示,其中,红色箭头指向的是透过小孔看得见的字母。 小团选择第1个齿轮的第2个按钮按下,小美旋转后,会变为图第二行的状态 小团选择第3个齿轮的第1个按钮按下,小美旋转后,会变为图第三行的状态
输入
2
BB
3
ABA
输出
3
3

算法解析依据一般

考点:组合数学

限制 1 秒 / 256MB | 标准输入输出

题目画像

  • 源站时限:1 秒(牛客口径,非本题专属门槛)

解题思路

参考方向:组合数学

用计数原理(加法/乘法原理)与组合数公式统计方案数。

思路框架(组合数学 通法 · 非本题专属)

  1. 判断是分类计数(相加)还是分步计数(相乘)。
  2. 识别是否重复/是否有序,决定用排列 A(n,m) 还是组合 C(n,m)。
  3. 组合数递推 C[i][j] = C[i-1][j-1] + C[i-1][j],或预处理阶乘与逆元。
  4. 答案通常要求对 1e9+7 取模。

实现要点:阶乘预处理 + 费马小定理求逆元可以在 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场编程题。

‹ 上一题 全部编程题 下一题 ›
编程算法题为只读内容:无需作答,直接看题与解析 · 本站不提供在线判题 · 解析由校招宝本地引擎整理,非官方题解