
Mutual Training for Wannafly Union #8 D - Mr.BG Hates Palindrome 取余
问题分析:Mr.BG 有 M 种不同的字母,每种有 N 个。他从中选出 N 个小球,放到 N 个盒子里,每个盒子放一个小球。我们需要计算所有可能的字符串中,非回文字符串的数量。 总排列数:每个盒子可以选择 M 个字母中的任意一个,因此总排列数为 ( M^N )。 回文排列数:回文字符串的对称性要求每个对称位置对字符相同。计算回文排列数时,考虑长度为 N 的字符串的对称结构,分别计算偶数和奇数的情况。 快速幂计算:为了高效计算大数的幂取模,使用快速幂算法。 读取输入:使用 处理每个测试用例:读取 N 和 M,处理特殊情况(如 N=0 或 M=0)。 计算总排列数:使用 计算回文排列数:根据 N 的奇偶性分别计算对称位置对的数量,使用快速幂计算回文排列数。 计算结果:总排列数减去回文排列数,取模后输出结果。
发布日期:2025-04-15 08:12:57
浏览次数:5
分类:精选文章
本文共 1086 字,大约阅读时间需要 3 分钟。
为了解决这个问题,我们需要计算 Mr.BG 在给定约束下形成的所有可能字符串中非回文字符串的数量。我们将使用数学方法来高效地解决这个问题。
方法思路
解决代码
MOD = 10**9 + 7def main(): import sys input = sys.stdin.read data = input().split() TC = int(data[0]) index = 1 for _ in range(TC): N = int(data[index]) M = int(data[index+1]) index += 2 if N == 0 or M == 0: print(0) continue total = pow(M, N, MOD) if N % 2 == 0: k = N // 2 else: k = (N + 1) // 2 palindrome = pow(M, k, MOD) res = (total - palindrome) % MOD print(res)if __name__ == "__main__": main()
代码解释
sys.stdin.read
读取所有输入数据,处理多个测试用例。pow
函数计算 ( M^N \mod (10^9 + 7) )。该方法通过数学分析和快速幂算法,高效地解决了问题,确保了计算的正确性和性能。
发表评论
最新留言
逛到本站,mark一下
[***.202.152.39]2025年05月17日 05时36分53秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
mysql /*! 50100 ... */ 条件编译
2025-04-15
mysql 1045解决方法
2025-04-15
mysql 150,MySQL错误150
2025-04-15
mysql 5.6 修改端口_mysql5.6.24怎么修改端口号
2025-04-15
mysql 5.6.20的安装、配置服务、设置编码格式
2025-04-15
MUI使用vue示例
2025-04-15
MySQL 5.7 mysqldump的Bug导致复制异常
2025-04-15
mysql 5.7 主从配置
2025-04-15
mysql 5.7中文乱码解决
2025-04-15
mui折叠面板点击事件跳转
2025-04-15
MySQL 5.7在线设置复制过滤
2025-04-15
mui框架通讯录检索
2025-04-15
MySQL 8 公用表表达式(CTE)—— WITH关键字深入用法
2025-04-15
mysql 8 远程方位_mysql 8 远程连接注意事项
2025-04-15
MUI框架里的ajax的三种方法
2025-04-15
MySQL 8.0 恢复孤立文件每表ibd文件
2025-04-15