代码
# include <bits/stdc++.h>
# define int long long
# define wheneveright signed main
using namespace std;
const int maxn = 5005;
const int mod = 1000000007;
int KSM (int x, int y = mod - 2) {
int ret = 1;
while (y) {
if (y & 1) ret = ret * x % mod;
x = x * x % mod; y >>= 1;
}
return ret % mod;
}
int n, res, odd;
int fac[maxn], inv[maxn];
char s[maxn];
int cnt[27];
wheneveright () {
scanf ("%lld%s", & n, s + 1); fac[0] = inv[0] = 1;
for (int i = 1; i <= n; i++) inv[i] = KSM (fac[i] = fac[i - 1] * i % mod);
for (char i : s) cnt[i - 'a']++;
for (int i = 0; i < 26; i++) odd += cnt[i] & 1;
if (odd > 1) return printf ("%lld\n", fac[n] % mod); odd = 1;
for (int i = 0; i < 26; i++) if (cnt[i] & 1) odd = cnt[i]; res = fac[n / 2] * odd % mod;
for (int i = 0; i < 26; i++) res = res * fac[cnt[i]] % mod * inv[cnt[i] / 2] % mod;
res = fac[n] - res;
printf ("%lld\n", (res % mod + mod) % mod);
return 0;
}
测试点2输入输出:
8
aabbcdee
40320
在本地是可以输出且不 RE 的,不知道为什么交上去就大红大紫,路过的大佬帮帮这个普及组的蒟蒻吧/ll/ll/ll