【CSP-J2019 江西】非回文串

【CSP-J2019 江西】非回文串


NOIP 专栏:CSP-J 2019 江西
算法竞赛:数学,组合数学,组合计数,排列组合,全排列,不可重复的排列,字符串,传统题(标准 OI)
题目链接:洛谷 P5684【CSP-J2019 江西】非回文串

题目描述:
Alice 有 n n n 个字符,它们都是英文小写字母,从 1 ∼ n 1 \sim n 1n 编号,分别为 c 1 , c 2 , … , c n c_1,c_2, \dots , c_n c1,c2,,cn
Bob 准备将这些字符重新排列,组成一个字符串 S S S。Bob 知道 Alice 有强迫症,所以他打算将 S S S 组成一个非回文串来折磨 Alice。
现在 Bob 想知道他共有多少种不同的排列字符的方案,能使得 S S S 是个非回文串。一种排列字符的方案指的是一个 1 ∼ n 1 \sim n 1n 的排列 p i p_i pi,它所组成的 S = c p 1 c p 2 … c p n S = c_{p_1}c_{p_2} \dots c_{p_n} S=cp1cp2cpn
一个字符串是非回文串,当且仅当它的逆序串与原串不同。例如 abcda 的逆序串为 adcba,与原串不同,故 abcda 是非回文串。而 abcba 的逆序串与原串相同,是回文串。
由于最后的结果可能很大,你只需要告诉 Bob 总方案数对 1 0 9 + 7 10^9+7 109+7 取模后的值。

输入格式:
第一行一个正整数 n n n 表示字符个数。
第二行 n n n 个英文小写字母 c i c_i ci
输出格式:
仅一行一个整数表示答案。答案对 1 0 9 + 7 10^9+7 109+7 取模。

数据范围:
对于 20 % 20\% 20% 的数据, n ≤ 8 n \le 8 n8
对于 50 % 50\% 50% 的数据, n ≤ 20 n \le 20 n20
另有 30 % 30\% 30% 的数据,字符只包含 ab
对于 100 % 100\% 100% 的数据, 3 ≤ n ≤ 2000 3 \le n \le 2000 3n2000


题目分析

给定一个长度为 n n n 的仅由小写字母构成的字符串 S [ 1 ∼ n ] S[1\sim n] S[1n],求出字符串 S [ 1 ∼ n ] S[1\sim n] S[1n] 的排列中不为回文串的数量。

回文串即左右字符成轴对称的字符串,如 abbccbba,acbca 为回文串,aabbcc,abcabc 不是回文串。

注意:不同位置的相同字母的编号不同,如 aba 的回文串有两个,即 a 1 b a 2 , a 2 b a 1 a_1ba_2,a_2ba_1 a1ba2,a2ba1


算法知识

  1. 全排列,无重复排列
  2. 快速幂
  3. 费马小定理(逆元)
  4. 模运算

排列组合

(1)排列概念

这里用到组合数学中的排列全排列无重复排列)。

排列(permutation),即从 n n n 个不同的元素中,任取 m , ( m ≤ n ) m,(m\le n) m,(mn) 个元素,按照一定的顺序排成一列,这就叫做从 n n n 个不同元素中取出 m m m 个元素的一个排列。特别地,当 m = n m=n m=n 时,这个排列被称作全排列(all permutation)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

HAH-HAH

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值